(Java Swing)JTextField更新“为时已晚”

时间:2015-06-01 21:23:24

标签: java swing jtextfield keylistener

这是来自英尺 - 米 - 米转换器的代码示例。我的问题:它没有更新当前输入,例如:如果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,但我不想在此错误未修复之前继续编码。

2 个答案:

答案 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

相关问题