我需要两个相互影响的JTextField

时间:2012-01-20 13:47:29

标签: java swing user-interface

我有一个带有两个JTextField的JPanel。如果用户将一些文本写入文本字段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 个答案:

答案 0 :(得分:7)

利用MVC设计并分享模型:

textFieldB.setDocument(textFieldA.getDocument());

答案 1 :(得分:3)

仅在textFieldB hasFocus时更新textFieldA(反之亦然)

答案 2 :(得分:2)

您可以使用布尔值来标记传播更改的时间。

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

答案 3 :(得分:-1)

我会在两个文本字段上使用键侦听器执行此操作,然后将keyPressed事件复制到另一个触发字段。招呼