如何解决JText 字段,仅在用户更改某些内容时通知更新
我想知道是否有办法注意到侦听器是否正在更改 JTextField 的文本,或者它是否由 .setText() 完成;我需要区分这两种情况,因为当用户或程序访问时它需要做不同的事情。
解决方法
我假设您使用 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);
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。