FXML欧元转多货币工具优化:回车触发计算+逗号小数格式
欧元转其他货币程序优化实现
需求说明
现有基于FXML的欧元转货币程序可正常运行,需完成两处优化:
- 按下回车键时触发转换计算
- 转换结果使用逗号作为小数分隔符(示例:1234,56)
修改后的完整代码
private void onAction(ActionEvent event) { try { double conversor = 0; String euros = ValorEuros.getText(); // 处理用户输入的逗号,转为小数点用于数值解析 double cantEuros = Double.parseDouble(euros.replace(',', '.')); // 检查输入非空且有目标货币被选中 if (!ValorEuros.getText().isEmpty() && (Libra.isSelected() || Dolar_americano.isSelected() || Rupia_india.isSelected() || Yuan_chino.isSelected())) { if (Libra.isSelected()) { conversor = cantEuros * 0.88; } else if (Dolar_americano.isSelected()) { conversor = cantEuros * 1.19; } else if (Rupia_india.isSelected()) { conversor = cantEuros * 80.22; } else { conversor = cantEuros * 7.5; } } // 设置小数分隔符为逗号 DecimalFormatSymbols symbols = new DecimalFormatSymbols(); symbols.setDecimalSeparator(','); DecimalFormat df = new DecimalFormat("#.###", symbols); String redondeado = df.format(conversor); ResultadoConversion.setText(redondeado); } catch (NumberFormatException e) { ResultadoConversion.setText("Error en formato de número"); } } @FXML private void onKeyPressed(KeyEvent event) { // 检测到回车键时触发转换 if (event.getCode() == KeyCode.ENTER) { onAction(new ActionEvent()); event.consume(); // 消费事件避免重复触发 } }
优化点说明
回车键触发转换
- 修改
onKeyPressed方法,当检测到KeyCode.ENTER时,直接调用onAction方法执行转换逻辑 - 调用
event.consume()消费事件,防止事件传递导致重复执行
- 修改
逗号作为小数分隔符
- 创建
DecimalFormatSymbols实例,通过setDecimalSeparator(',')将小数分隔符设置为逗号 - 初始化
DecimalFormat时传入自定义的符号配置,确保格式化后的结果使用逗号替代小数点 - 保留原有的
#.###格式规则,保证结果最多保留三位小数
- 创建
另外,移除了原代码中无意义的do-while循环和isSelected方法,简化代码逻辑,避免不必要的循环执行。
内容的提问来源于stack exchange,提问作者CDAMXI
相关产品推荐
相关产品推荐

