1

JTextFieldNetbeans を使用して、多くの要素を持つ GUI を作成しています。それらすべてを繰り返し呼び出して を呼び出すsetTextと、テキストは1、2、3になります...

private javax.swing.JTextField txt1;
private javax.swing.JTextField txt2;
private javax.swing.JTextField txt3;
private javax.swing.JTextField txt4;
private javax.swing.JTextField txt5;
private javax.swing.JTextField txt6;

それぞれを手動で呼び出すのではなく、ループでこれを行う方法を探していsetTextます。

そのようなものかもしれません:

public void getInfoJText2(){
    Component[] children = jPanel1.getComponents();
    for (int i = 0, j = 1; i < children.length; i++) {
        if (children[i] instanceof JTextField) {
            ((JTextField) children[i]).setText(Integer.toString(j++));
        }
    }
}

どうすればこれを処理できますか?

4

2 に答える 2

6

JTextFields の配列 (またはリスト) を使用し、代わりにそれを反復処理します。ドラッグ アンド ドロップ GUI を取り除きたくない場合 (GUI ビルダーに完全に依存する必要があるため、GUI を作成する方法としては不適切です)、テキスト フィールドを配列。

テキストフィールドが初期化されたら、getInfoJText2()メソッドでアクセス可能な配列を作成し、テキストフィールドへの参照を配列に入れます。

JTextField[] fields = new JTextField[6];  // Instance variable in the class

public void initArray() {
    fields[0] = txt1;
    fields[1] = txt2;
    fields[2] = txt3;
    // etc.
}

その後、 getInfoJText2() メソッドで fields -array を使用でき、順序は常に同じになります。

于 2013-09-06T06:16:11.733 に答える
0
public void getInfoJText2() throws IllegalArgumentException, IllegalAccessException {
    Field[] fields = jPanel1.getClass().getDeclaredFields();
    for(Field field : fields) {
        if(field.getName().contains("txt") && field.getType().getName().equals(JTextField.class.getName())) {
            JTextField jField = (JTextField)field.get(jPanel1);
            jField.setText(field.getName().substring(3));
            System.out.println(jField.getText());
        }
    }
}

上記のコアを試すことができます。それは反射を使用します

于 2013-09-06T07:03:50.737 に答える