java - JText 字段,仅当用户更改某些内容时才通知更新
问题描述
我想知道是否有办法注意到侦听器是否正在更改 JTextField 的文本,或者是否由 .setText(); 我需要区分这两种情况,因为当用户或程序访问它时,它需要做不同的事情。
解决方案
我假设您使用 aDocumentListener
来挂钩用户的输入。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);
});
}
}
推荐阅读
- nfc - 如何在 gototags 或任何其他适用于 NFC 的 windows 软件中对考勤系统进行编程或编码?
- vb6 - VB6 和 windows 10 屏幕闪烁
- vhdl - 使用 MIF 文件的 VHDL 预加载 RAM 存储器
- firebase - 将值存储在 Firebase 中并在 React Native 中导航
- angular - 使用 GitLab CI 时无法识别 Firebase
- javascript - console.log() not showing in any browser in angular 6 project
- docker - 在docker中使用“ZoKrates”时,如何修复“线程'main'在'Err'值上的'调用'Result :: unwrap()'时惊慌失措?
- bash - The "non-man" explanation of -n in echo (shell)
- python - 如何给出要为目标检测训练的文件的路径
- xamarin - 为什么 listview 在 xamarin 表单的滚动视图中占用更多空间?