1

我使用 Netbeans 创建包含许多JTextField元素的 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

使用 JTextField 的数组(或列表)并对其进行迭代。如果您不想摆脱拖放式 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 回答