我有 2 个 jframes.in 1 个 jframes,我在 jtextarea 中提供输入,应该在另一个 jframe jtextarea 中显示。我怎样才能得到它。我使用netbeans,我使用swing 设计了jframes。谁能帮我。
问问题
2284 次
3 回答
2
您可以简单地在两个文本组件之间共享同一个 Document 实例:
thisTextArea.setDocument(thatTextArea.getDocument())
于 2010-01-22T11:44:43.680 回答
0
执行此操作的正确方法是使用观察者模式(也称为侦听器)。一般来说,两个主框架不应该知道依赖框架。它应该提供一种通知任何感兴趣的人的方式。所以在代码中:
public class SourceFrame extends JFrame {
private final JTextArea sourceArea = new JTextArea();
private TargetFrame targetFrame; // somehow set this one
public void addTextChangeKeyListener(KeyListener listener) {
sourceArea.addKeyListener(listener);
}
// a method to remove the listener might be required as well
}
然后在 TargetFrame 中订阅源文本区域中发生的关键事件:
public class TargetFrame extends JFrame {
private final JTextArea targetArea = new JTextArea();
private SourceFrame sourceFrame; // set this via constructor
// this is called on initialization, perhaps from the constructor.
// Check what NetBeans has generated
public void init() {
sourceFrame.addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
public void insertUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
public void removeUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
}
}
e.getSource()
返回创建事件的组件。
于 2010-01-22T08:24:29.993 回答
0
以下代码可能比之前上面的任何神秘解释更好地说明了这一点::)
public class SourceFrame extends JFrame {
private final JTextArea sourceArea = new JTextArea();
private TargetFrame targetFrame; // somehow set this one
public void addDocumentListener(DocumentListener listener) {
sourceArea.getDocument().addDocumentListener(listener);
}
public void removeDocumentListener(DocumentListener listener) {
sourceArea.getDocument().removeDocumentListener(listener);
}
}
public class TargetFrame extends JFrame {
private final JTextArea targetArea = new JTextArea();
private final SourceFrame sourceFrame;
public void init() {
sourceFrame.addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
public void insertUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
public void removeUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
}
}
}
理想情况下,一个人应该有一个公共方法来设置 TargetFrame 中的文本并在其他地方实现侦听器,因此两个框架都不需要引用另一个框架。
于 2010-01-22T08:07:41.770 回答