【问题标题】:JTextField not updating user input in for-loopJTextField 未在 for 循环中更新用户输入
【发布时间】:2014-01-10 08:59:09
【问题描述】:

我的 for 循环没有更新,我每次都得到用户输入的相同字母的输出“mmmmmm”或“ffffff”。我希望它每次都像这样不断更新下一个字母:

用户输入:m
用户输入:f
用户输入:d

输出:“使用的字母:mfd”

int j = 0;  
String []used = new String[6];  
for(j = 0; j<6; j++){  
    used[j] = tf.getText(); //get user input  
}  
jl2.setText("Letters Used:    " + used[0] + used[1] + used[2] + used[3] + used[4] + used[5] );  

【问题讨论】:

    标签: java swing for-loop jlabel jtextfield


    【解决方案1】:

    您不应该为此使用 for 循环。 JTextField 内置了对 DocumentListener 文本更改的回调:

    tf.getDocument().addDocumentListener(new DocumentListener() {
        public void changedUpdate(DocumentEvent e) {          // text was changed
            jl2.setText("Letters Used:    " + tf.getText());
        }
        public void removeUpdate(DocumentEvent e) {}          // text was deleted
        public void insertUpdate(DocumentEvent e) {}          // text was inserted
    });  
    

    更新:

    如果您只想在Enter 按下时回复,您可以使用ActionListener which is called on Enter presses

    jl2.setText("Letters Used:    ");
    
    tf.addActionListener(new ActionListener(){
        @Override public void actionPerformed(ActionEvent e){
            jl2.setText(jl2.getText() + tf.getText());
        }
    });
    

    注意:实际上,ActionEvent 是由系统的观感“接受”动作触发的。在大多数情况下,这是回车键。

    【讨论】:

    • 我想这样当按下“输入”时,输入的字母会显示在 JLabel 中,并且会不断添加下一个输入的字母。使用文档侦听器,输入的文本会实时显示,因此当输入的字母被删除时,它也会从 JLabel 中删除
    • +1 用于 ActionListener,但使用 Document.insertString(...) 方法而不是使用 setText() 方法来附加文本。
    • +1 表示额外的NoteUpdate,使答案更全面。
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多