从JPanel数组中的JTextField数组中访问数据? -数独

时间:2015-12-19 02:58:32

标签: java arrays

我创建了一个数独游戏板,并且我创建了9个JPanel,每个JPanel拥有9个JTextField。我的问题是我不知道如何从一个SPECIFIC面板获取JTextField的输入。

这就是我创建每个JTextField和JPanel的方法。我已经用另一种方法初始化了它们。

private JPanel panel1, panel2, panel3, panel4, panel5, panel6, panel7, panel8, panel9;

private JPanel[][] smallgrids = { {panel1, panel2, panel3}, {panel4, panel5, panel6}, {panel7, panel8, panel9} };

private JTextField cell1, cell2, cell3, cell4, cell5, cell6, cell7, cell8, cell9;

private JTextField[][] cells = { {cell1, cell2, cell3}, {cell4, cell5, cell6}, {cell7, cell8, cell9}};

这是我从每个JTextField获取输入所做的:

String input;
for(int x = 0; x < 3; x++){
    for(int y = 0; y < 3; y++){
        input = cells[x][y].getText();          
        cells[x][y].setText(input);

            }   
        }
        //this was my test to see if it would print the correct value
        System.out.println(input[0][0]);

我的问题是循环访问单元格的输入,而没有指定它来自哪个面板。如何指定我从哪个面板访问输入?对不起,如果措辞有点令人困惑。如果需要,我可以发布所有代码。

这就是我的董事会的样子: enter image description here

2 个答案:

答案 0 :(得分:0)

建议:

  1. 创建一个9 x 9的JTextField数组 - 现在已经解决了主要问题,因为只需使用适当的索引就可以访问所有JTextField。
  2. 创建一个3 x 3的JPanel数组,并从上面为每个JPanel 9提供相应的JTextField。
  3. 最重要的是,创建一个带有9 x 9数组的int或者更好的枚举的模型类,因为soduku数字不会表现为真实数字,而是任何9项独特项目集合都可以使用。
  4. 模型将有9个正方形对应JPanels,每个将包含9个枚举项目
  5. 您还需要行和列集合来测试行和列逻辑有效性(没有重复的枚举条目)。

答案 1 :(得分:0)

你的smallgrids是一个2d的JPanel阵列。您的单元格是JTextField的二维数组。从你的代码看起来,你现在只有一个。

使用您当前的设计,您的smallgrids数组中的每个JPanel都需要一个JTextField网格。我可以像这样创建和初始化这些值:

public void init_grids(){
    // create the outer grid.
    JPanel[][] grid = NEW JPanel[3][3];

    // for each cell of the outer grid
    for (int x1 = 0; x1 < 3; x1++) {
        for (int y1 = 0; y1 < 3; y1++) {

            // create the array of textfields for this panel.
            JTextField[][] textFields = new JTextField[3][3];
            grid[x1][y1] = textFields;

            // for each cell of the inner grid
            for (int x2 = 0; x2 < 3; x2++) {
                for (int y2 = 0; y2 < 3; y2++) {

                    // create the text field.
                    textFields[x2][y2] = new JTextField();
                }
            }
        }
    }
}

通过以下方式访问它:

// 1st 2 indices are outer grid, 2nd 2 are the inner grid.
grid[x1][y1][x2][y2].getText();