我想从安排在9 X 9
网格中的81个文本字段中获得int
形式的文本,但不想单独做。我试图把它放在一个循环,但问题是,文本字段名称必须显示在a[i][j]
形式。
for (i = 0; i < 9; i++) {
for (j = 0; j < 9; j++) {
a[i][j] = *i want the name of text field like "a" + i + j*.getText();
}
}
文本字段的名称如下:
a00, a01, a02, a03, a04…a88 .
你不能用java这样做(实际上有一些方法可以做到这一点,但它们很复杂,容易出错,而且肯定不是你想要的。如果你还想知道,请查阅反射)。
这个问题的解决方案是使81个文本框成为一个文本框数组
JTextField[][] input = new JTextField[9][9];
for(i=0;i<9;i++) {
for(j=0;j<9;j++) {
input[i][j] = new JTextField();
}
}
现在你可以用
来称呼每一个input[x][y]
,其中x和y是0到8之间的整数。
尤其是
input[x][y].getText()
从单个输入字段获取值
不能将String引用到像
这样的变量 "a" + i + j.getText();
您需要将您的文本字段更改为Jens指定的内容。
如果你不想改变所有的文本字段,你需要为它们添加引用,这是完全不推荐的。
JTextField [][]fields = new JTextField[9][9];
fields[0][0] = a00;
fields[0][1] = a01;
fields[0][2] = a02;
...
你有两个选择:
A)将文本字段存储在JTextField[][]
数组中。
由于A
已经在其他答案中解释了,我将只关注B
。
Java中的反射可以用来将某些字段的名称转换为字段本身,类似于
JTextField getField(int row, int col) {
int index = 9 * col + row; // for row-major tables
// int index = 9*row + col; // for col-major tables
String name = String.format("a%02d", index);
System.out.println("Name: " + name); //For debugging purposes
try {
Field field = Test.class.getDeclaredField(name);
return (JTextField) field.get(this);
} catch (NoSuchFieldException | SecurityException
| IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
您需要将这段代码放入声明了a00, a01, a02, ...
字段的同一个类中。此外,这只会获取存储在字段中的JTextField
,因此您不能使用此设置字段。可以使用类似的set方法。
然而,在Java中使用反射通常被认为是一种不好的做法。在这里,解决方案A
可以而且应该使用,但是如果你很懒,你不想重写你的代码,你可以使用这个。