现在有3个JTextField:tf1,tf2,tf3。想实现如下功能:当改变其中一个组件的内容时,其他2个组件的内容也跟着变化,显示相同的内容,如何实现?我尝试过用:Document类和DocumentListener接口,但好像陷入了死循环。部分代码如下:
=====================代码(1)===============================
DL dl = new DL();
//把tf1,tf2,tf3的Document实现同一个DocumentListener接口
dl.addMember(tf1);
dl.addMember(tf2);
dl.addMember(tf3);
=======================代码(2)=================================
class DL implements DocumentListener { ArrayList <JTextField> members = new ArrayList <JTextField> (); public void addMember(JTextField tf) {
tf.getDocument().addDocumentListener(this);
members.add(tf);
} @Override
public void insertUpdate(DocumentEvent e) {
setMemberText(e);
} @Override
public void removeUpdate(DocumentEvent e) {
setMemberText(e);
} @Override
public void changedUpdate(DocumentEvent e) { } private void setMemberText(DocumentEvent e) {
for (JTextField d : members) {
if (d.getDocument() == e.getDocument()) { //如果是组件本身引起的变化,无需改变该组件的内容。
continue;
}
try {
String str=e.getDocument().getText(0, e.getDocument().getLength());
d.setText(str); //改变其他组件的内容
} catch (Exception ex) {
}
}
}
}
========================================
这样做有个缺点:当某一个JTextField的内容发生变化时,其他2个也会受到影响,从而跟着改变内容。改变内容后,又影响原来的JTextField改变,如此循环~~~~~请问,这种方法能行得通吗?如果可以,应如何修改?
=====================代码(1)===============================
DL dl = new DL();
//把tf1,tf2,tf3的Document实现同一个DocumentListener接口
dl.addMember(tf1);
dl.addMember(tf2);
dl.addMember(tf3);
=======================代码(2)=================================
class DL implements DocumentListener { ArrayList <JTextField> members = new ArrayList <JTextField> (); public void addMember(JTextField tf) {
tf.getDocument().addDocumentListener(this);
members.add(tf);
} @Override
public void insertUpdate(DocumentEvent e) {
setMemberText(e);
} @Override
public void removeUpdate(DocumentEvent e) {
setMemberText(e);
} @Override
public void changedUpdate(DocumentEvent e) { } private void setMemberText(DocumentEvent e) {
for (JTextField d : members) {
if (d.getDocument() == e.getDocument()) { //如果是组件本身引起的变化,无需改变该组件的内容。
continue;
}
try {
String str=e.getDocument().getText(0, e.getDocument().getLength());
d.setText(str); //改变其他组件的内容
} catch (Exception ex) {
}
}
}
}
========================================
这样做有个缺点:当某一个JTextField的内容发生变化时,其他2个也会受到影响,从而跟着改变内容。改变内容后,又影响原来的JTextField改变,如此循环~~~~~请问,这种方法能行得通吗?如果可以,应如何修改?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货