简体   繁体   中英

how to access jtextarea from one jframe to other jframe

im having 2 jframes.in 1 jframes,i am giving input in jtextarea,that should be displayed in another jframe jtextarea.how can i get that. im using netbeans,i have designed jframes using swing. can anyone help me.

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

The following code perhaps illustrates that better than any cryptic explanation that previously stood above: :)

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()));
            }
        }
    }

}

Ideally, one would have a public method for setting the text in TargetFrame and implement the listener somewhere else so none of both frames does need to reference the other one.

The proper way to do this is using the Observer pattern (also called listener). Generally, the two main frame shouldn't know of the dependent frame. It should provide a way for notification whoever is interested . So in code:

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
}

And then in the TargetFrame you subscribe for key events that occur in the source text area:

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()));
        }
    }
}

The e.getSource() returns the component that created the event.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM