java - 在 Java 中使用 JPanels 的数独板

标签 java arrays swing 2d sudoku

我知道已经有几篇关于数独相关问题的帖子,但我不确定它们是否正是我要找的...

我正在尝试使用 JPanels 和 JTextfields 在 Java 中构建一个空的数独板。我还需要使用另一个 JPanel 在右侧创建一个菜单。

棋盘本身是一个 9 x 9 的正方形,分为 9 个 3x3 的正方形。请注意,每个较小的正方形都由比常规正方形间边框更重的边框衬托。每个方 block 都是一个文本字段。编写程序,使文本字段中没有任何内容。用户可以根据需要在文本字段中键入内容,如果他们这样做,数字就会显示出来。侧面有四个按钮,可让您解决、获得新谜题、获得提示或重置谜题。

任何想法都会很棒。我无法理解如何嵌套 for 循环来创建电路板。这是我的代码...

    import javax.swing.*;
    import javax.swing.border.Border;
    import java.awt.*;

    public class ArrayTest extends JFrame {

        public ArrayTest() {

    JPanel board = new JPanel(new GridLayout(9, 9));
    add(board);

    JPanel[][] squares = new JPanel[9][9];

    Border border = BorderFactory.createLineBorder(Color.BLACK);


    for (int row = 1; row < 9; row++) {

        for (int col = 1; col < 9; col++) {
            squares[row][col] = new JPanel();
            board.add(squares[row][col]);

        }

    }



    JPanel menu = new JPanel();
    menu.add(new JButton("Reset"));
    menu.add(new JButton("Hint"));
    menu.add(new JButton("Solve"));
    menu.add(new JButton("New Puzzle"));



    add(menu);

}
public static void main(String[] args) {
    // TODO Auto-generated method stub

    /** Create a frame and set its properties*/
    JFrame frame = new ArrayTest();
    frame.setTitle("Sudoku");
    frame.setSize(600, 600);
    frame.setLocationRelativeTo(null); //Center the frame
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

}

最佳答案

我看到的几件事:

  • 我认为您不需要像现在这样的 9x9 JPanel,而是 9x9 JTextField。您可能需要 3x3 JPanel,这样您就可以使每个部分的边框更粗。明确地列出这些内容可能更容易,而不是尝试在循环中进行。

  • 你的循环计数器(和数组索引)应该从 0 开始,而不是 1。按照你现在的方式,循环只会执行 8 次。

  • 您将要跟踪每行、每列和每个 3x3 子组中的值。行和列就像在二维数组中一样简单。您可能会考虑在每个 3x3 区域中保存值的另一个数组数组。这使您在需要时更容易扫描这些值,并且如果您采用这种方式,可能有助于将值放置在较小的 3x3 JPanel 中。

关于java - 在 Java 中使用 JPanels 的数独板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12886200/

相关文章:

java - 如何从另一个类访问对象(例如 ArrayList)?

java - 在 Windows 7 中使用命令提示符设置类路径

php - 使用 PHP 将数组中的值插入 mysql

python - Numpy:搜索第一个匹配行

java - "Comparison method violates its general contract!"- TimSort 和 GridLayout

java - 实现 try 和 catch block

java - 中间件 API 的最佳实践是什么?

arrays - 基本 perl : regex statement not working in perl 5. 10.1 机器但在 5.18 中工作?

java - JTable 单元格内的 JDateChooser Enter 键并不总是有效

java - 如何使用按钮切换到特定的JPanel?