All pastes #966478 Raw Edit

Someone

public text v1 · immutable
·published 2008-04-01 19:35 UTC
rendered paste body
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("");
				}
			}
		}
	}

	//****************************************************

}