使用java的Sudoku GUI

时间:2012-03-16 23:37:58

标签: java swing user-interface sudoku solver

我正在为我正在制作的这个数独求解器制作我的GUI。我设法打印出了没有问题的电路板。不过,我想知道如何将3x3区域与某种较粗或有色线区分开来。

基本上类似于下图。

sudoku

以下是我已经实施的代码。谢谢!

    Board = new JPanel(new GridLayout(9, 9));
    for(int i= 0; i < 9; i++) {

        for(int j = 0; j < 9; j++) {

            board[i][j] = new JLabel();

            board[i][j].setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));


            Font font = new Font("Arial", Font.PLAIN, 20);

            board[i][j].setFont(font);

            board[i][j].setForeground(Color.WHITE);

            board[i][j].setBackground(Color.WHITE);


            board[i][j].setOpaque(true);

            board[i][j].setHorizontalAlignment(JTextField.CENTER);

            Board.add(board[i][j]);

        }
    }

3 个答案:

答案 0 :(得分:6)

到目前为止,最简单的方法是使用9 {3} JPanelJLabel s嵌套到一个大的3x3 JPanel JPanel中。然后你可以在小的3x3s上应用特殊的边框。

答案 1 :(得分:3)

如果您创建了自己的自定义JPanel来保存数字并绘制黑色边框,然后使用自定义JPanel来保存这些数据网格,该怎么办?

示例自定义JPanel:

    class SudokuPanel extends JPanel {

        int digit; //the number it would display
        int x, y; //the x,y position on the grid

        SudokuPanel(int x, int y) {
            super();

            this.x = x;
            this.y = y;

            /** create a black border */
            setBorder(BorderFactory.createLineBorder(Color.black));

            /** set size to 50x50 pixel for one square */
            setPreferredSize(50,50);
        }

        public int getDigit() { return digit; }

        //getters for x and y

        public void setDigit(int num) { digit = num }

    }

示例自定义网格JPanel:

    class SudokuGrid extends JPanel {

        SudokuGrid(int w, int h) {
            super(new GridBagLayout());

            GridBagConstraints c = new GridBagConstraints();
            /** construct the grid */
            for (int i=0; i<w; i++) {
                for (int j=0; j<h; j++) {
                    c.weightx = 1.0;
                    c.weighty = 1.0;
                    c.fill = GridBagConstraints.BOTH;
                    c.gridx = i;
                    c.gridy = j;
                    add(new SudokuPanel(i, j), c);
                }
            }

            /** create a black border */ 
            setBorder(BorderFactory.createLineBorder(Color.black)); 

        }

    }

示例代码:

...
SudokuGrid sg = new SudokuGrid(3,3);
myFrame.add(sg);
...

答案 2 :(得分:1)

以下是Yahoo Answers的一些示例代码!如何将JPanel添加到JPanel

    import javax.swing.*;

public class RecursiveJPanelTest
{
public static void main(String[] arg)
{
JFrame window = new JFrame();
JPanel top = new JPanel();
JPanel within = new JPanel();

window. setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);

window.setSize(400, 200);
top.setSize(400, 200);
within.setSize(400, 200);

window.add(top);
top.add(within);
within.add(new JButton("Button"));

window.validate();
window.setVisible(true);
top.setVisible(true);
within.setVisible(true);
}
}

如果没有全部搞砸,就无法在评论中发布此内容。