【问题标题】:How to print JTextField value immediately after user input?如何在用户输入后立即打印 JTextField 值?
【发布时间】:2013-12-27 06:56:42
【问题描述】:

我希望用户在JTextField 中输入一个值并使用侦听器来侦听文本字段并将值直接打印到控制台而无需按键。

textfield1.addChangeListener(new ChangeListener() {
    public void actionPerformed(ActionEvent e) {                
        System.out.println(textfield1);
    }
});

错误:

<anonymous textfield$2> is not abstract and does not override abstract method stateChanged(ChangeEvent) in ChangeListener

【问题讨论】:

  • 我说的是 ChangeListener 而不是 documentlistener。你能帮帮我吗?
  • 我不认为你会,但如果你对我告诉你把代码放在哪里感到困惑,请评论我的回答。不过这很容易;你可能会明白的。
  • 考虑 KeyListener 而不是 ChangeListener
  • @user2994263, Iam talking about ChangeListener not documentlistener - 你不应该使用 ChangeListener。你应该使用 DocumentListener。

标签: java textfield changelistener


【解决方案1】:

把这个私有类放入你的公共类。就像一个方法。

private class textChangedListener implements KeyListener 
{
    public void keyPressed(KeyEvent e){} 
    public void keyReleased(KeyEvent e){}

    public void keyTyped(KeyEvent e) 
    {
        System.out.print(textField1.getText());
    } 
}

然后在您的 main 方法中将其调用到您的 JTextField,如下所示:

private JTextField textField1; // just showing the name of the JTextField
textField1.addKeyListener(new textChangedListener());

【讨论】:

    【解决方案2】:

    是的,只需使用 KeyListener 类,请参见下面的示例:

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    
    public class Main extends JFrame {
      public Main() throws HeadlessException {
        setSize(200, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(FlowLayout.LEFT));
    
        JLabel label = new JLabel("Write something: ");
        JTextField input = new JTextField();
    
        input.setPreferredSize(new Dimension(100, 20));
    
        final JTextField output = new JTextField();
        output.setPreferredSize(new Dimension(100, 20));
        add(label);
        add(input);
        add(output);
    
        input.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                JTextField textField = (JTextField) e.getSource();
                String text = textField.getText();
                output.setText(text);
            }
    
            public void keyTyped(KeyEvent e) {
    
            }
    
            public void keyPressed(KeyEvent e) {
            }
        });
    }
    
    public static void main(String[] args) {
        new Main().setVisible(true);
    }
    }
    

    【讨论】:

      【解决方案3】:

      您可以为文本字段的 textproperty 设置一个 addlistener。

      textField.textProperty().addListener(new ChangeListener<String>() {
                  @Override
                  public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                      System.out.println("textfield changed to "+ newValue);
                  }
              });
      

      【讨论】:

        猜你喜欢
        • 2016-06-16
        • 2015-07-17
        • 1970-01-01
        • 2020-11-02
        • 2017-02-16
        • 2013-03-31
        • 1970-01-01
        • 2017-07-06
        • 2021-03-04
        相关资源
        最近更新 更多