rendered paste bodyimport 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("");
}
}
}
}
//****************************************************
}