这是来自英尺 - 米 - 米转换器的代码示例。我的问题:它没有更新当前输入,例如:如果JTextField中的文本是“50”,textField.getText()
只给出字符串“5”,那么double result
将是5.0 。因此,JTextField中的“5”在double result = Double.parseDouble(textField.getText());
“空字符串”中给出错误。提前感谢您的回答!
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,但我不想在此错误未修复之前继续编码。
答案 0 :(得分:2)
您使用的是错误的事件,请尝试使用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);
}
}
}
});
答案 1 :(得分:0)
不要将KeyListener
与文字组件一起使用,用户可以将文字粘贴到您的听众不会接听的字段中。
相反,如果您想知道修改字段的时间,则应使用DocumentListener
。有关详细信息,请参阅Listening for Changes on a Document