diff --git a/app/src/main/java/gui/SudokuView.java b/app/src/main/java/gui/SudokuView.java index 81d6bcf..da09ec7 100644 --- a/app/src/main/java/gui/SudokuView.java +++ b/app/src/main/java/gui/SudokuView.java @@ -1,6 +1,8 @@ package gui; import javax.swing.*; +import javax.swing.border.Border; + import java.awt.*; import java.awt.event.*; @@ -27,24 +29,42 @@ public class SudokuView extends JFrame { setTitle("Sudoku Solver"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); + setIconImage(new ImageIcon("src/main/resources/sudoku.png").getImage()); initializeGrid(); initializeButtons(); - pack(); - setLocationRelativeTo(null); + setMinimumSize(new Dimension(500, 500)); + pack(); // Resize the window to fit the components, if necessary + setLocationRelativeTo(null); // Center the window } /** Initialize the grid, called by the constructor */ private void initializeGrid() { grid = new JTextField[9][9]; JPanel gridPanel = new JPanel(new GridLayout(9, 9)); + gridPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); + + int fontSize = 24; + String fontName = gridPanel.getFont().getName(); + Border border = BorderFactory.createLineBorder(Color.BLACK); + Font font = new Font(fontName, Font.BOLD, fontSize); for (int row = 0; row < 9; row++) { for (int col = 0; col < 9; col++) { - grid[row][col] = new JTextField(2); - grid[row][col].setHorizontalAlignment(JTextField.CENTER); - gridPanel.add(grid[row][col]); + JTextField cell = new JTextField(2); + cell.setHorizontalAlignment(JTextField.CENTER); + cell.setFont(font); + cell.setBorder(border); + cell.setForeground(Color.BLACK); + + // Set background color to gray for every third JTextField + if ((row / 3 + col / 3) % 2 == 1) { + cell.setBackground(Color.LIGHT_GRAY); + } + + grid[row][col] = cell; + gridPanel.add(cell); } } diff --git a/app/src/main/java/sudoku/Solver.java b/app/src/main/java/sudoku/Solver.java index 95a77b3..5579481 100644 --- a/app/src/main/java/sudoku/Solver.java +++ b/app/src/main/java/sudoku/Solver.java @@ -20,10 +20,18 @@ public class Solver implements SudokuSolver { this.board = board; } - /** {@inheritDoc} */ + /** + * {@inheritDoc} + *

+ * Note that this returns a copy of the board, not the actual board + */ @Override public int[][] getBoard() { - return board; + int[][] copy = new int[9][9]; + for (int row = 0; row < 9; row++) { + System.arraycopy(board[row], 0, copy[row], 0, 9); + } + return copy; } /** Resets the board to all zeros */ @@ -34,7 +42,6 @@ public class Solver implements SudokuSolver { row[i] = 0; } } - // board = new int[9][9]; } /* {@inheritDoc} */ @@ -120,8 +127,8 @@ public class Solver implements SudokuSolver { } } - /** - * {@inheritDoc} + /** + * {@inheritDoc} *

* This is not checked for validity */ diff --git a/app/src/main/resources/sudoku.png b/app/src/main/resources/sudoku.png new file mode 100644 index 0000000..2667031 Binary files /dev/null and b/app/src/main/resources/sudoku.png differ diff --git a/app/src/test/java/sudoku/SolverTest.java b/app/src/test/java/sudoku/SolverTest.java index 7000140..ef082c6 100644 --- a/app/src/test/java/sudoku/SolverTest.java +++ b/app/src/test/java/sudoku/SolverTest.java @@ -17,8 +17,12 @@ class SolverTest { Solver solver = new Solver(); int[][] board = new int[9][9]; solver.setBoard(board); - assertEquals(board, solver.getBoard()); + + for (int row = 0; row < 9; row++) { + assertArrayEquals(board[row], solver.getBoard()[row]); + } } + @Test void randomizeBoardTest() { @@ -28,6 +32,12 @@ class SolverTest { assertNotEquals(board, solver.getBoard()); } + @Test + void emptyTest() { + Solver solver = new Solver(); + assertTrue(solver.solve()); + } + @Test void legalTest() { Solver solver = new Solver();