我有一个带有两个JTextField的JPanel。如果用户将一些文本写入文本字段A,则相同的文本应出现在文本字段B中,反之亦然。
如何在不获得无限循环的情况下实施。
到目前为止,我有以下内容,这将导致无限循环。
JTextField textFieldA;
JTextField textFieldB;
textFieldA.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
String line = doc.getText(0, doc.getLength());
textFieldB.setText(line);
}
textFieldB.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
Document doc = (Document)e.getDocument();
String line = doc.getText(0, doc.getLength());
textFieldA.setText(line);
}
答案 0 :(得分:7)
利用MVC设计并分享模型:
textFieldB.setDocument(textFieldA.getDocument());
答案 1 :(得分:3)
仅在textFieldB
hasFocus时更新textFieldA
(反之亦然)
答案 2 :(得分:2)
您可以使用布尔值来标记传播更改的时间。
JTextField textFieldA;
JTextField textFieldB;
boolean updating = false;
textFieldA.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
if(!updating) {
updating = true;
Document doc = (Document)e.getDocument();
String line = doc.getText(0, doc.getLength());
textFieldB.setText(line);
updating = false;
}
}
textFieldB.getDocument().addDocumentListener(new DocumentListener() {
public void insertUpdate(DocumentEvent e) {
if(!updating) {
updating = true;
Document doc = (Document)e.getDocument();
String line = doc.getText(0, doc.getLength());
textFieldA.setText(line);
updating = false;
}
}
答案 3 :(得分:-1)
我会在两个文本字段上使用键侦听器执行此操作,然后将keyPressed事件复制到另一个触发字段。招呼