import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; //import Sudoku.Clear; //import Sudoku.Solve; public class SudokuGUI extends JFrame { public JTextField[][] JTF; public Sudoku Sudoku; //**Sätter upp det grafiska gränssnittet för programmet****** public SudokuGUI(Sudoku S){ Sudoku = S; JFrame frame; JPanel area; JPanel buttons; JButton solve; JButton clear; frame = new JFrame("test"); area = new JPanel(new GridLayout(9, 9)); frame.setPreferredSize(new Dimension(200, 250)); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); area.setPreferredSize(new Dimension(200, 200)); JTF = new JTextField[9][9]; Color C = Color.white; for(int i=0; i<=8;i++){ //sätter rutornas färg I sudokut for(int j =0; j<=8;j++){ if(j == 3 || j ==6){ C=changeColor(C); } if((i == 3|| i == 6) && j==0){ C=changeColor(C); } JTF[i][j] = new JTextField(1); JTF[i][j].setHorizontalAlignment(0); JTF[i][j].setBackground(C); area.add(JTF[i][j]); } } frame.add(area, BorderLayout.NORTH); buttons = new JPanel(new GridLayout(1, 2)); buttons.setPreferredSize(new Dimension(100,20)); solve = new JButton("Lös"); clear = new JButton("Rensa"); buttons.add(solve); buttons.add(clear); frame.add(buttons, BorderLayout.SOUTH); frame.pack(); frame.setVisible(true); area.setVisible(true); solve.addActionListener(new Solve()); clear.addActionListener(new Clear()); } public static Color changeColor(Color C){ if (C == Color.lightGray){ return Color.white; } return Color.lightGray; } //**********Metod för att läsa in sudokut******************* public boolean readMatrix(){ for(int i =0; i<=8; i++){ for(int j=0; j<=8; j++){ if(JTF[i][j].getText().equals("")){ //om rutan är tom i sudokut Sudoku.matrix[i][j]=-1; Sudoku.change[i][j]=true; //sätter upp matris för att hålla reda på vilka element som får ändras JTF[i][j].setForeground(Color.black); Sudoku.finalRow = i; Sudoku.finalCol = j; }else{ Sudoku.matrix[i][j]=Integer.parseInt(JTF[i][j].getText()); Sudoku.change[i][j]=false; JTF[i][j].setForeground(Color.blue); } } } for(int i =0; i<=8; i++){ //Om användaren matat in en uppenbart olöslig matris returnera false for(int j=0; j<=8; j++){ if(Sudoku.chk(Sudoku.matrix, i,j)==false){ return false; } } } return true; } //**********Implementerar knapparna********************* public class Solve implements ActionListener { public void actionPerformed(ActionEvent e) { if(readMatrix()){ if(Sudoku.solveNext(0, 0)==true){ //Om matrisen är lösbar så showSolution(); // presentera denna System.out.println("Done"); }else{ System.out.println("Inga lösningar"); //om ej lösbar } }else{ System.out.println("Matat in fel"); //Om fel inmatad } } } //***********Metod för att skriva ut lösningen********* public void showSolution(){ String s = ""; for(int i =0; i<=8; i++){ for(int j=0; j<=8; j++){ s = ""+Sudoku.matrix[i][j]; JTF[i][j].setText(s); } } } //***********Metod för att rensa sodukot**************** public class Clear implements ActionListener { public void actionPerformed(ActionEvent e) { for(int i=0; i<=8;i++){ for(int j =0; j<=8;j++){ JTF[i][j].setText(""); } } } } //**************************************************** }