как получить доступ к jtextarea из одного jframe к другому jframe - PullRequest
0 голосов
/ 22 января 2010

У меня 2 jframes.in 1 jframes, я даю ввод в jtextarea, который должен отображаться в другом jframe jtextarea. Как я могу это получить. Я использую NetBeans, я разработал JFrames с использованием Swing. кто-нибудь может мне помочь.

Ответы [ 3 ]

2 голосов
/ 22 января 2010

Вы можете просто поделиться одним и тем же экземпляром Document между двумя текстовыми компонентами: thisTextArea.setDocument(thatTextArea.getDocument())

0 голосов
/ 22 января 2010

Правильный способ сделать это - использовать шаблон Observer (также называемый слушателем). Как правило, два основных кадра не должны знать о зависимом кадре. Это должно обеспечить способ уведомления , кто заинтересован . Так в коде:

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() возвращает компонент, который создал событие.

0 голосов
/ 22 января 2010

Следующий код, возможно, иллюстрирует это лучше, чем любое загадочное объяснение, которое ранее стояло выше: :)

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 и реализовывать слушатель где-то еще, поэтому ни один из обоих фреймов не должен ссылаться на другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...