我正在使用转换度,一旦用户在文本字段中输入值指出所需的度,则应显示具有输出结果的输入,而不是之前的标签。 这里是关于仅在文本字段中输入数字的字母格式限制的部分
NumberFormat format = NumberFormat.getInstance();
NumberFormatter formatter = new NumberFormatter(format);
formatter.setValueClass(Double.class);
formatter.setMinimum(Double.MIN_VALUE);
formatter.setMaximum(Double.MAX_VALUE);
formatter.setAllowsInvalid(false);
formatter.setCommitsOnValidEdit(true);
formattedTextField = new JFormattedTextField(formatter);
formattedTextField.setColumns(10);
}
这里是问题
public void keyPressed(KeyEvent e){
double degree;
if (Angle.isSelected()||e.getKeyChar()==KeyEvent.VK_ENTER){
degree = Math.toDegrees((double)formattedTextField.getValue());
resultLabel.setText(formattedTextField.getValue()
+ " ° = "+ degree + " radians");
}else if(Radians.isSelected()||e.getKeyChar()==KeyEvent.VK_ENTER){
degree = Math.toRadians((double) formattedTextField.getValue());
resultLabel.setText(formattedTextField.getValue() +
" radians = " + degree + " °");
}
}
}
答案 0 :(得分:1)
问题是您使用的是||
(或)而不是&&
(和)。您的if
测试不需要按回车键;他们要求键为ENTER,选择或单选按钮之一(角度或弧度)。
所有这些…都没关系,因为您不应为此使用KeyListener。通常,您通过adding an ActionListener在JTextField中按Enter来检查用户,但是JFormattedTextField有更好的方法,它不仅监视Enter,而且监视焦点丢失:the documentation for JFormattedTextField’s value property指出这是一个绑定属性,这意味着您可以在该属性中listen to changes:
formattedTextField.addPropertyChangeListener("value",
new PropertyChangeListener() {
@Override
public void propertyChangeEvent(PropertyChangeEvent event) {
Double newValue = (Double) event.getNewValue();
if (newValue != null) {
if (angle.isSelected()) {
double radians = Math.toRadians(newValue);
resultLabel.setText(
newValue = + " ° = " + radians + " radians");
} else {
double degree = Math.toDegrees(newValue);
resultLabel.setText(
newValue + " radians = " + degree + " °");
}
}
}
});