我使用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++));
}
}
}
我该如何处理?
答案 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());
}
}
}
你可以试试上面的核心。它使用反射