簡體   English   中英

如何從一個jframe訪問jtextarea到另一個jframe

[英]how to access jtextarea from one jframe to other jframe

我有2個jframe.in 1個jframe,我在jtextarea中輸入,應該在另一個jframe jtextarea中顯示。我怎么能得到它。 我正在使用netbeans,我已經使用swing設計了jframe。 誰能幫我。

您可能只是在兩個文本組件之間共享相同的Document實例: thisTextArea.setDocument(thatTextArea.getDocument())

以下代碼可能比以前的任何神秘解釋更好地說明了這一點::)

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中設置文本並在其他地方實現偵聽器,因此這兩個框架都不需要引用另一個框架。

正確的方法是使用觀察者模式 (也稱為偵聽器)。 通常,兩個主框架不應該知道從屬框架。 它應該提供一種通知感興趣的人的方法 因此在代碼中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM