Судоку GUI с использованием Java - PullRequest
5 голосов
/ 17 марта 2012

В настоящее время я работаю над своим графическим интерфейсом для этого решателя Судоку, который я делаю.Мне удалось распечатать доску без проблем.Однако я хотел бы знать, как я собираюсь дифференцировать области 3х3 с помощью какой-то более толстой или цветной линии.

В основном что-то похожее на картинку ниже.*

Ниже приведен код, который я уже реализовал.Спасибо!

    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 ]

6 голосов
/ 17 марта 2012

Самым простым способом было бы использовать девять 3x3 JPanel с JLabel с, вложенных в один большой 3x3 JPanel из JPanel с. Тогда вы можете просто применить специальные границы для маленьких 3х3.

3 голосов
/ 17 марта 2012

Что если вы создали свой собственный 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);
...
1 голос
/ 17 марта 2012

Вот пример кода из ответов Yahoo!о том, как можно добавить 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);
}
}

Не удалось опубликовать это в комментарии, не запутавшись в этом.

...