Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import java.util.ArrayList;
- import java.util.Random;
- public class GUI extends JFrame implements ActionListener, KeyListener {
- private JMenuBar menuBar = new JMenuBar();
- private JMenu fileMenu = new JMenu("File");
- private JMenu newGame = new JMenu("New game");
- private JMenuItem deleteGame = new JMenuItem("Delete game");
- private JMenuItem easyGame = new JMenuItem("Easy game");
- private JMenuItem mediumGame = new JMenuItem("Medium game");
- private JMenuItem hardGame = new JMenuItem("Hard game");
- private JTextField[][] gameGrid = new JTextField[9][9];
- public GUI() {
- this.setLayout(new GridLayout(9, 9));
- this.setTitle("Sudoku");
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- fillEmptyGrid();
- addKeyListeners();
- addMenuItems();
- addActionListeners();
- fillBoard(100);
- this.setVisible(true);
- this.pack();
- }
- private void fillEmptyGrid() {
- for (int i = 0; i < 9 ; i++)
- {
- for (int j = 0; j < 9; j++)
- {
- this.gameGrid[i][j] = new JTextField("");
- this.gameGrid[i][j].setPreferredSize(new Dimension(50, 50));
- this.gameGrid[i][j].setHorizontalAlignment(JTextField.CENTER);
- this.add(this.gameGrid[i][j]);
- }
- }
- }
- private void addKeyListeners() {
- for (int i = 0; i < 9 ; i++)
- {
- for (int j = 0; j < 9; j++)
- {
- this.gameGrid[i][j].addKeyListener(this);
- }
- }
- }
- private void addActionListeners() {
- this.deleteGame.addActionListener(this);
- this.newGame.addActionListener(this);
- this.easyGame.addActionListener(this);
- this.mediumGame.addActionListener(this);
- this.hardGame.addActionListener(this);
- }
- private void addMenuItems() {
- this.setJMenuBar(this.menuBar);
- this.menuBar.add(this.fileMenu);
- this.fileMenu.add(this.newGame);
- this.fileMenu.add(this.deleteGame);
- this.newGame.add(this.easyGame);
- this.newGame.add(this.mediumGame);
- this.newGame.add(this.hardGame);
- }
- private ArrayList<Integer> generateNumbers()
- {
- ArrayList<Integer> sudokuNumbers = new ArrayList<>();
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9; j++) {
- sudokuNumbers.add((j + 1));
- }
- }
- return sudokuNumbers;
- }
- private void clearGrid() {
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9; j++) {
- this.gameGrid[i][j].setText("");
- this.gameGrid[i][j].setEditable(true);
- }
- }
- }
- private void fillBoard(int fillPercentage){
- clearGrid();
- ArrayList<Integer> sudokuNumbers = generateNumbers();
- Random randomGenerator = new Random();
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9; j++) {
- int tolerance = randomGenerator.nextInt(100);
- if(tolerance < fillPercentage) {
- JTextField currentCell = this.gameGrid[i][j];
- int randomIndex = randomGenerator.nextInt(sudokuNumbers.size());
- String randomNumber = Integer.toString(sudokuNumbers.get(randomIndex));
- sudokuNumbers.remove(randomIndex);
- currentCell.setText(randomNumber);
- currentCell.setEditable(false);
- }
- }
- }
- }
- @Override
- public void actionPerformed(ActionEvent e)
- {
- if (e.getSource().equals(this.deleteGame)) {
- clearGrid();
- } else if (e.getSource().equals(this.easyGame)) {
- fillBoard(100);
- } else if (e.getSource().equals(this.mediumGame)) {
- fillBoard(80);
- } else if (e.getSource().equals(this.hardGame)) {
- fillBoard(60);
- }
- }
- @Override
- public void keyTyped(KeyEvent e) {
- if (e.getKeyChar() < 49 || e.getKeyChar() > 57){
- e.consume();
- }
- }
- @Override
- public void keyPressed(KeyEvent e) {
- }
- @Override
- public void keyReleased(KeyEvent e) {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment