如何像getText()一样输入[i][j].getText();(用于netbeans中的数独解算器)



我想从安排在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[][]数组中。

B)使用反射

由于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可以而且应该使用,但是如果你很懒,你不想重写你的代码,你可以使用这个。

相关内容

  • 没有找到相关文章