Java JText字段,注意仅当用户更改某些内容时才更新
我想知道是否有一种方法可以注意到侦听器是否正在更改JTextField的文本,或者是否是由.setText()完成的;我需要区分这两种情况,因为当用户或程序访问时,它需要做不同的事情。我假设您使用Java JText字段,注意仅当用户更改某些内容时才更新,java,swing,jtextfield,Java,Swing,Jtextfield,我想知道是否有一种方法可以注意到侦听器是否正在更改JTextField的文本,或者是否是由.setText()完成的;我需要区分这两种情况,因为当用户或程序访问时,它需要做不同的事情。我假设您使用文档监听器连接到用户的输入。在从程序中调用setText时,可以删除此文档侦听器 看看下面的例子。按下按钮时,文本将更改,而不显示打印消息 public class DocumentListenerExample extends JFrame { private JTextField textF
文档监听器
连接到用户的输入。在从程序中调用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);
});
}
}
可能的重复(超出重复关闭投票数)使用DocumentListener,如重复所述,但在程序更改文本字段值时将其关闭,在程序完成更改后再次打开。一个简单的布尔标志就足以允许您这样做。