2

「for ループ」を使用して、実行時に動的に JTextField の配列を作成します。

同じまたは同等の「for ループ」を使用して、それぞれに DocumentListener を追加します。ユーザーがこれらの JTextField の内容を編集した後に実行されるはずのコードは、JTextField/DocumentListener ごとに個別に定義されているようです。

問題: ユーザー アクションの後に実行されるコードが、最後の "for ループ" ラウンドが終了したときに最後に確認された状態であるため、これは機能しません。

int counter; // this is global, because otherwise needs to be final
JTextField[] a;

void calculate() {

    // ...the code sections that contains a = new JTextField[limit]; and
    // a[i] = new JTextField(); is omitted...

    for(counter = 0; counter < limit; counter++) {

        a[counter].getDocument().addDocumentListener(new DocumentListener() {

            public void insertUpdate(DocumentEvent e) {
                in = a[counter].getText(); 
                // this fails, because in the case of any text edits in any
                // of the JTextFields a[0...limit-1]
                // the code that executes is the one with counter = limit
            }


            public void removeUpdate(DocumentEvent e) {
                in = a[counter].getText(); // this fails
            }


            public void changedUpdate(DocumentEvent e) {
                in = a[counter].getText(); // obsolete
            }

        });

    }    

}
4

1 に答える 1