(Java 摆动)JTextField 更新 "too late"
(Java Swing) JTextField updates "too late"
这是来自英尺<->米转换器的代码示例。我的问题:它不更新当前输入,例如:如果 JTextField 中的文本是“50”,textField.getText()
只给出字符串“5”,所以 double result
将是 5.0 .因此,JTextField 中的“5”会在 double result = Double.parseDouble(textField.getText());
"Empty String" 中给出错误。预先感谢您的回答!
public static void addKL(JTextField textField, JTextField textField2, String name) {
textField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_1||evt.getKeyCode() == KeyEvent.VK_2||evt.getKeyCode() == KeyEvent.VK_3||evt.getKeyCode() == KeyEvent.VK_4||evt.getKeyCode() == KeyEvent.VK_5||evt.getKeyCode() == KeyEvent.VK_6||evt.getKeyCode() == KeyEvent.VK_7||evt.getKeyCode() == KeyEvent.VK_9||evt.getKeyCode() == KeyEvent.VK_COLON||evt.getKeyCode() == KeyEvent.VK_BACK_SPACE ) {
double result = Double.parseDouble(textField.getText());
if(name=="ftFIELD") {
textField2.setText("" + result/3.2808);
}
else if(name=="mFIELD") {
textField2.setText("" + result*3.2808);
}
}
}
});
}
注意:如果 KeyEvent 无效,当然会缺少 else,但我不想在未修复此错误之前继续编码。
您使用的事件有误,请尝试 keyReleased
。还修复了字符串比较
text.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_1||evt.getKeyCode() == KeyEvent.VK_2||evt.getKeyCode() == KeyEvent.VK_3||evt.getKeyCode() == KeyEvent.VK_4||evt.getKeyCode() == KeyEvent.VK_5||evt.getKeyCode() == KeyEvent.VK_6||evt.getKeyCode() == KeyEvent.VK_7||evt.getKeyCode() == KeyEvent.VK_9||evt.getKeyCode() == KeyEvent.VK_COLON||evt.getKeyCode() == KeyEvent.VK_BACK_SPACE ) {
double result = Double.parseDouble(text.getText());
if("ftFIELD".equals(name)) {
textField2.setText("" + result/3.2808);
}
else if("mFIELD".equals(name)) {
textField2.setText("" + result*3.2808);
}
}
}
});
不要将 KeyListener
与文本组件一起使用,用户可能会将文本粘贴到您的收听者不会拾取的字段中。
相反,如果您想知道字段何时被修改,您应该使用 DocumentListener
。有关详细信息,请参阅 Listening for Changes on a Document
这是来自英尺<->米转换器的代码示例。我的问题:它不更新当前输入,例如:如果 JTextField 中的文本是“50”,textField.getText()
只给出字符串“5”,所以 double result
将是 5.0 .因此,JTextField 中的“5”会在 double result = Double.parseDouble(textField.getText());
"Empty String" 中给出错误。预先感谢您的回答!
public static void addKL(JTextField textField, JTextField textField2, String name) {
textField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_1||evt.getKeyCode() == KeyEvent.VK_2||evt.getKeyCode() == KeyEvent.VK_3||evt.getKeyCode() == KeyEvent.VK_4||evt.getKeyCode() == KeyEvent.VK_5||evt.getKeyCode() == KeyEvent.VK_6||evt.getKeyCode() == KeyEvent.VK_7||evt.getKeyCode() == KeyEvent.VK_9||evt.getKeyCode() == KeyEvent.VK_COLON||evt.getKeyCode() == KeyEvent.VK_BACK_SPACE ) {
double result = Double.parseDouble(textField.getText());
if(name=="ftFIELD") {
textField2.setText("" + result/3.2808);
}
else if(name=="mFIELD") {
textField2.setText("" + result*3.2808);
}
}
}
});
}
注意:如果 KeyEvent 无效,当然会缺少 else,但我不想在未修复此错误之前继续编码。
您使用的事件有误,请尝试 keyReleased
。还修复了字符串比较
text.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_1||evt.getKeyCode() == KeyEvent.VK_2||evt.getKeyCode() == KeyEvent.VK_3||evt.getKeyCode() == KeyEvent.VK_4||evt.getKeyCode() == KeyEvent.VK_5||evt.getKeyCode() == KeyEvent.VK_6||evt.getKeyCode() == KeyEvent.VK_7||evt.getKeyCode() == KeyEvent.VK_9||evt.getKeyCode() == KeyEvent.VK_COLON||evt.getKeyCode() == KeyEvent.VK_BACK_SPACE ) {
double result = Double.parseDouble(text.getText());
if("ftFIELD".equals(name)) {
textField2.setText("" + result/3.2808);
}
else if("mFIELD".equals(name)) {
textField2.setText("" + result*3.2808);
}
}
}
});
不要将 KeyListener
与文本组件一起使用,用户可能会将文本粘贴到您的收听者不会拾取的字段中。
相反,如果您想知道字段何时被修改,您应该使用 DocumentListener
。有关详细信息,请参阅 Listening for Changes on a Document