Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用数组创建多个文本字段_Java_Swing - Fatal编程技术网

Java 使用数组创建多个文本字段

Java 使用数组创建多个文本字段,java,swing,Java,Swing,我正在尝试创建一个9x9的文本字段网格,这些字段都在一个数组中。左上角称为字段[1][1],右下角称为字段[9][9]。到目前为止,我编写的代码是 int NUM_FIELDS_X = 1; //x textField int NUM_FIELDS_Y = 1; // y textField int x = 21; // x location of textField int y = 21; // y location of textField Text

我正在尝试创建一个9x9的文本字段网格,这些字段都在一个数组中。左上角称为字段[1][1],右下角称为字段[9][9]。到目前为止,我编写的代码是

    int NUM_FIELDS_X = 1; //x textField
    int NUM_FIELDS_Y = 1; // y textField
    int x = 21; // x location of textField
    int y = 21; // y location of textField

    TextField[][] fields = new TextField[NUM_FIELDS_X][NUM_FIELDS_Y]; {
        for (NUM_FIELDS_Y =1; NUM_FIELDS_Y <= 9; NUM_FIELDS_Y++) {

            for (NUM_FIELDS_X =1; NUM_FIELDS_X <= 9; NUM_FIELDS_X++) {

                    fields[NUM_FIELDS_X][NUM_FIELDS_Y] = new TextField();

                    fields[NUM_FIELDS_X][NUM_FIELDS_Y].setColumns(10);
                    fields[NUM_FIELDS_X][NUM_FIELDS_Y].setBounds(x, y, 32, 32);
                    frame.getContentPane().add(fields[NUM_FIELDS_X][NUM_FIELDS_Y]);

                    x=x+32;
                }
            y = y+32;
        }
    }
但是,我一启动它就会出错,for循环不会启动。im接收到的错误消息为

java.lang.ArrayIndexOutOfBoundsException: 1
at sudokuSolver.sudokuInterface.initialize(sudokuInterface.java:70)
at sudokuSolver.sudokuInterface.<init>(sudokuInterface.java:44)
at sudokuSolver.sudokuInterface$1.run(sudokuInterface.java:31)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
谢谢阿卡什·贾哈和编码员克罗克的帮助,我已经设法修复了它。我已将代码更改为

    int NUM_FIELDS_X = 0; //x number of textField
    int NUM_FIELDS_Y = 0; // y number of textField
    int x = 21; // x location of textField
    int y=21; // y location of textField



    TextField[][] fields = new TextField[9][9]; {
        for (NUM_FIELDS_Y =0; NUM_FIELDS_Y < 9; NUM_FIELDS_Y++) {
            x=21;
            for (NUM_FIELDS_X =0; NUM_FIELDS_X <= 8; NUM_FIELDS_X++) {

                    fields[NUM_FIELDS_X][NUM_FIELDS_Y] = new TextField();

                    fields[NUM_FIELDS_X][NUM_FIELDS_Y].setColumns(10);
                    fields[NUM_FIELDS_X][NUM_FIELDS_Y].setBounds(x, y, 32, 32);
                    frame.getContentPane().add(fields[NUM_FIELDS_X][NUM_FIELDS_Y]);

                    x=x+32;
                }
            y = y+32;
        }
    }

您正在创建一个文本字段数组[1][1],并试图在数组中放置多个元素。。。
增加文本字段数组的大小。这将有助于解决出现问题的代码

NUM_FIELDS_Y = 1; NUM_FIELDS_Y <= 9;
编辑

字段数组的长度为1

因此,字段在索引[0][0]处只能有一个1元素,而第一次迭代尝试访问[1][1],这是不正确的


访问链接了解有关数组的更多信息。

实际上,左上角是字段[0][0],右下角是字段[8][8]。数组在Java中是基于零的。另外,我得到一个错误是不够的。你会带你的车去修理并且拒绝告诉机修工症状吗?请发布完整的错误消息,并通过询问问题来跟踪堆栈。将堆栈跟踪格式化为代码。@JimGarrison这就是为什么我在开始时将NUM_字段_X和Y都设置为1,所以它不会是0-8这不是数组声明的工作方式。请重新访问有关数组的Java教程部分。您不能更改数组的原始索引,它始终为零。因此,我是否应该将其更改为TextField[][]fields=new TextField[9][9]
int xLength = 9;
int yLength = 9;
TextField[][] fields = new TextField[xLength][yLength];
for (int x = 0; x < xLength; x++) {
    for (int y = 0; y < yLength; y++) { 
        // your code
    }
}
TextField[][] fields = new TextField[NUM_FIELDS_X][NUM_FIELDS_Y];