按顺序获取所有JTextField

时间:2013-09-06 06:15:06

标签: java arrays swing jtextfield gettext

我使用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++));
        }
    }
}

我该如何处理?

2 个答案:

答案 0 :(得分:6)

使用JTextFields的数组(或List)并迭代完成。如果您不想摆脱拖放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()方法中使用你的字段-array,顺序总是一样的。

答案 1 :(得分: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());
        }
    }
}

你可以试试上面的核心。它使用反射

相关问题