访问具有不同“姓氏”的变量

时间:2013-05-10 09:21:38

标签: java swing jtextfield

我使用Netbeans创建Java应用程序。我创建了一些文本字段,其名称来自jTextField1jTextField16。现在我必须将这些文本字段的值存储在一个二维数组中,但我不知道如何这样做。我想用for循环访问所有文本字段。

我应该如何使用for循环来解决这些变量?

int Count=0;
for (int i=0; i<4; i++) {
    for (int j=0; j<4; j++) {
        a[i][j] = Integer.parseInt(jTextField1.getText());
    }
}

4 个答案:

答案 0 :(得分:3)

而不是

JTextField field1 = ...;
JTextField field2 = ...;
...
JTextField field16 = ...;

您可以使用数组:

JTextField[] fields = new JTextField[16];
fields[0] = ...;
fields[1] = ...;
...
fields[15] = ...;

然后你的循环变得容易写:

a[i][j] = Integer.parseInt(fields[i * 4 + j].getText());

修改

在Netbeans中,您可以使用Find&amp;替换以自动替换所有变量。例如,假设变量名为jField1jField2等,您可以执行以下操作:

  • 编辑&gt;替换项目
  • 包含文字:jField(\d+)
  • 勾选“正则表达式”
  • 替换为:fields[$1]
  • 范围:选择您的文件
  • 查找 - &gt;它会打开一个搜索窗口
  • 点击“替换匹配”
  • 然后,您需要通过将所有索引减1来完成它(必须是手动的)

Et瞧,不到一分钟。

或者,如果只需更改几个变量,您只需将光标放在变量名称上,按 CTRL + R 并更改名称:它将自动更改所有出现的变量你项目中的那个变量。

答案 1 :(得分:1)

正如其他人提到的那样,你不能这样做。

你可以做的最好的事情是创建一个JTextField的数组并在其上循环:

int k = 0;
for (int i=0; i<4; i++) {
    for (int j=0; j<4; j++) {
        a[i][j] = Integer.parseInt(jTextFieldArray[k].getText());
        k++;
    } 
}

这将根据需要循环遍历数组内的组件(从0到15)。

答案 2 :(得分:0)

“普通”Java无法做到这一点。

您可以(例如)创建表示字段名称的字符串,并使用反射来查找Field个对象,然后检索它们的值。但这是复杂,脆弱和低效的......而且是个坏主意。

更好的解决方案是不存储将文本字段表示为单个变量。改为使用数组,然后您可以索引它们。

答案 3 :(得分:0)

终于这样做了

int a[][]=new int[4][4];
void convert() {
    JTextField jt[] = new JTextField[]{jTextField1, jTextField2, jTextField3, jTextField4, jTextField5, jTextField6, jTextField7, jTextField8, jTextField9, jTextField10, jTextField11, jTextField12, jTextField13, jTextField14, jTextField15, jTextField16};
    int count=0;
    for (int i=0; i<9; i++) {
        for (int j=0; j<9; j++) {
        a[i][j]=Integer.parseInt(jt[count].getText());
        count++;
        }
    }
}