【问题标题】:JText field, notice update only when user changes something [duplicate]JTextfield,仅在用户更改某些内容时才通知更新[重复]
【发布时间】:2021-05-05 04:22:05
【问题描述】:

我想知道是否有办法注意到侦听器是否正在更改 JTextField 的文本,或者是否由 .setText();我需要区分这两种情况,因为当用户或程序访问它时,它需要做不同的事情。

【问题讨论】:

  • Value Change Listener to JTextField 的可能重复项(出于欺骗关闭投票)
  • 使用 DocumentListener,正如重复提到的那样,但在程序更改文本字段的值时将其关闭,并在程序完成更改后重新打开。一个简单的布尔标志就足以让您执行此操作。

标签: java swing jtextfield


【解决方案1】:

我假设您使用DocumentListener 来挂钩用户的输入。当您从程序中调用 setText 时,您可以删除此文档侦听器。

看看下面的例子。按下按钮时,文本会更改,但不会显示打印消息。

public class DocumentListenerExample extends JFrame {
    private JTextField textField;
    private DocumentListener textFieldDocumentListener;

    public DocumentListenerExample() {
        super("");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setLayout(new FlowLayout());

        textField = new JTextField(20);
        textFieldDocumentListener = new DocumentListener() {

            @Override
            public void removeUpdate(DocumentEvent e) {
                System.out.println("Text changed by user");
            }

            @Override
            public void insertUpdate(DocumentEvent e) {
                System.out.println("Text changed by user");
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                System.out.println("Text changed by user");
            }
        };
        textField.getDocument().addDocumentListener(textFieldDocumentListener);

        add(textField);

        JButton button = new JButton("Change text");
        button.addActionListener(e -> {
            textField.getDocument().removeDocumentListener(textFieldDocumentListener);
            textField.setText(String.valueOf(Math.random()));
            textField.getDocument().addDocumentListener(textFieldDocumentListener);
        });

        add(button);

        pack();
        setLocationByPlatform(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new DocumentListenerExample().setVisible(true);
        });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2015-11-02
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    相关资源
    最近更新 更多