Мне нужно два JTextFields, которые влияют друг на друга - PullRequest
0 голосов
/ 20 января 2012

У меня есть JPanel с двумя полями JTextField. Если пользователь пишет некоторый текст в текстовое поле A, тот же текст должен появиться в текстовом поле B и наоборот.

Как это можно реализовать без получения бесконечного цикла.

Пока у меня есть следующее, что приводит к бесконечному циклу.

        JTextField textFieldA;
        JTextField textFieldB;

        textFieldA.getDocument().addDocumentListener(new DocumentListener() {
            public void insertUpdate(DocumentEvent e) {  
                Document doc = (Document)e.getDocument();
                String line = doc.getText(0, doc.getLength());  
                textFieldB.setText(line);
            }
            textFieldB.getDocument().addDocumentListener(new DocumentListener() {
                public void insertUpdate(DocumentEvent e) {  
                    Document doc = (Document)e.getDocument();
                    String line = doc.getText(0, doc.getLength());  
                    textFieldA.setText(line);
                }

Ответы [ 4 ]

7 голосов
/ 20 января 2012

Воспользуйтесь преимуществами дизайна MVC и поделитесь моделью:

textFieldB.setDocument(textFieldA.getDocument());
3 голосов
/ 20 января 2012

Попробуйте обновить textFieldB, только если textFieldA имеет Фокус (и наоборот)

2 голосов
/ 20 января 2012

Вы можете использовать логическое значение для пометки при распространении изменений.

    JTextField textFieldA;
    JTextField textFieldB;
    boolean updating = false;

    textFieldA.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent e) {  
            if(!updating) {
            updating = true;
            Document doc = (Document)e.getDocument();
            String line = doc.getText(0, doc.getLength());  
            textFieldB.setText(line);
            updating = false;
            }
        }
    textFieldB.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent e) {  
            if(!updating) {
            updating = true;
            Document doc = (Document)e.getDocument();
            String line = doc.getText(0, doc.getLength());  
            textFieldA.setText(line);
            updating = false;
            }
        }
0 голосов
/ 20 января 2012

Я бы сделал это с прослушивателем клавиш в обоих текстовых полях, после чего событие keyPressed копирует вызванное поле в другое.приветствует

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