Java 如何从一个jframe到另一个jframe访问jtextarea

Java 如何从一个jframe到另一个jframe访问jtextarea,java,swing,jframe,Java,Swing,Jframe,我有2个jframes。在1个jframes中,我在jtextarea中提供输入,它应该显示在另一个jframe jtextarea中。我如何获得它。 我使用netbeans,我使用swing设计了jframes。 有人能帮我吗。下面的代码也许比前面任何神秘的解释都能更好地说明这一点:) 理想情况下,可以使用公共方法在TargetFrame中设置文本,并在其他地方实现侦听器,这样两个框架都不需要引用另一个框架。正确的方法是使用(也称为侦听器)。一般来说,两个主框架不应该知道从属框架。它应该提供一

我有2个jframes。在1个jframes中,我在jtextarea中提供输入,它应该显示在另一个jframe jtextarea中。我如何获得它。 我使用netbeans,我使用swing设计了jframes。
有人能帮我吗。

下面的代码也许比前面任何神秘的解释都能更好地说明这一点:)


理想情况下,可以使用公共方法在TargetFrame中设置文本,并在其他地方实现侦听器,这样两个框架都不需要引用另一个框架。

正确的方法是使用(也称为侦听器)。一般来说,两个主框架不应该知道从属框架。它应该提供一种通知感兴趣的人的方式。因此,在代码中:

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()
返回创建事件的组件。

您可以在两个文本组件之间共享相同的文档实例:
thisTextArea.setDocument(thatTextArea.getDocument())

它们是在同一个VM中运行还是在不同的VM中运行?没有addDocumentListener这样的方法。此外,在这种情况下,这不是使用observer模式的适当方式哎呀,忘记了中间的getDocument()。至于代码,它并不是合适的,但更多的是简短的。那么,关于我的回答下面的“适当”语句,让我指出,我将考虑一个文档监听器一个有争议的事情,而在另一个类中的监听器在一个具体的JTestTaRa中无论如何都不是好主意。我们可以尝试一种折衷方案,采用您的体系结构和我的DocumentListener。DocumentEvent允许您获取文档,并从中检索文本,因此无需依赖所使用的文本组件的类型。OMG,有时由于所有这些树,它只是俯瞰森林。。。这才是真正应该做的,是的!
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()));
        }
    }
}