Hallo zusammen,
ich befasse mich innerhalb meines Studiums gerade mit der Entwicklung eines Sudoku-Spiels mit einer einfachen GUI.
Die GUI beinhaltet ein JPanel, auf dem durch ein GridLayout 9 x 9 JTextFields angeordnet sind.
Durch zwei Button (innerhalb einer eigenen Klasse) soll die Anwendung in der Lage sein, aus den JTextFields die Zahlen in eine Textdatei zu schreiben oder umgekehrt, aus einer Textdatei Zahlen in die JTextFields laden.
Das Format soll dabei wie folgt aussehen:
Leere Felder werden dabei als "." repräsentiert.
1 . 3 . 5 6 7 8 9
1 2 3 . 5 5 . 8 9
1 2 . . . 6 . 8 9
1 2 . 4 . 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 . 4 . 6 . 8 9
1 2 3 9 5 . . . .
1 . . 4 5 6 7 8 9
1 2 3 4 5 6 . 8 9
Laden:
Ich schaffe es bisher soweit, dass die Zahlen aus der Datei durch die Methode
Das Problem: Ich weiß nicht, wie ich das 2D Array in die JTextFields auf meinem Board schieben kann. Diese bleiben natürlich leer. Ich dachte, ich kann einfach
Speichern:
Beim Speichern kann ich lediglich ein vorher manuell erstelltes 2D Array in eine Textdatei speichern. Jedoch fehlt mir hier ebenfalls die Verbindung zu meinen JTextFields auf meinem Board. Was ich dort eintrage, kann ich nicht speichern.
Ist hier eine Lösung möglich? Die Beibehaltung der Klassen und Methodenbezeichnungen ist dabei verpflichtend. Ich kann also nicht mehrere Klassen zusammenführen.
Vielen Dank!!
Hauptklasse:
Klasse, in der mein Sudokuboard erstellt wird:
Klasse, in der das Speichern und Laden geregelt werden (sollen):
In einer weiteren Klasse habe ich den ActionListener dazu implementiert:
ich befasse mich innerhalb meines Studiums gerade mit der Entwicklung eines Sudoku-Spiels mit einer einfachen GUI.
Die GUI beinhaltet ein JPanel, auf dem durch ein GridLayout 9 x 9 JTextFields angeordnet sind.
Durch zwei Button (innerhalb einer eigenen Klasse) soll die Anwendung in der Lage sein, aus den JTextFields die Zahlen in eine Textdatei zu schreiben oder umgekehrt, aus einer Textdatei Zahlen in die JTextFields laden.
Das Format soll dabei wie folgt aussehen:
Leere Felder werden dabei als "." repräsentiert.
1 . 3 . 5 6 7 8 9
1 2 3 . 5 5 . 8 9
1 2 . . . 6 . 8 9
1 2 . 4 . 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 . 4 . 6 . 8 9
1 2 3 9 5 . . . .
1 . . 4 5 6 7 8 9
1 2 3 4 5 6 . 8 9
Laden:
Ich schaffe es bisher soweit, dass die Zahlen aus der Datei durch die Methode
load(Board board)
in ein 2D Array geschrieben werden. Dieses kann ich auch in der Konsole ausgeben lassen.Das Problem: Ich weiß nicht, wie ich das 2D Array in die JTextFields auf meinem Board schieben kann. Diese bleiben natürlich leer. Ich dachte, ich kann einfach
Board.sudokuBoard[][].setText(strArr[i][j] + "");
benutzen aber das funktioniert nicht.Speichern:
Beim Speichern kann ich lediglich ein vorher manuell erstelltes 2D Array in eine Textdatei speichern. Jedoch fehlt mir hier ebenfalls die Verbindung zu meinen JTextFields auf meinem Board. Was ich dort eintrage, kann ich nicht speichern.
Ist hier eine Lösung möglich? Die Beibehaltung der Klassen und Methodenbezeichnungen ist dabei verpflichtend. Ich kann also nicht mehrere Klassen zusammenführen.
Vielen Dank!!
Hauptklasse:
Java:
public final class Sudoku extends JFrame {
public Sudoku() {
setTitle("Sudoku");
getContentPane().setBackground(Color.WHITE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel buttonPanel = new ButtonPanel(null);
this.add(buttonPanel, BorderLayout.SOUTH);
JPanel board = new Board();
this.getContentPane().add(board, BorderLayout.CENTER);
pack();
}
public static void main(String[] args) {
new Sudoku().setVisible(true);
}
}
Klasse, in der mein Sudokuboard erstellt wird:
Java:
public final class Board extends JPanel {
private JPanel sudokuPane = new JPanel();
private SuTextField sudokuBoard [][] = new SuTextField [9][9];
public Board() {
setPreferredSize(new Dimension(400, 380));
sudokuPane = new JPanel(new GridLayout(9, 9));
for(int x = 0; x < 9; x++) {
for(int y = 0; y < 9; y++) {
sudokuBoard[x][y] = new SuTextField();
sudokuPane.add(sudokuBoard[x][y]);
}
}
add(sudokuPane);
setVisible(true);
setBorder(null);
}
Klasse, in der das Speichern und Laden geregelt werden (sollen):
Java:
public class InAndOut {
private SuTextField sudokuBoard [][] = new SuTextField [9][9];
private Board boardObj = new Board ();
JTextField textField = new JTextField();
public void load(Board board) throws IOException {
Scanner scanner = new Scanner(new FileReader(new File("easy-sudoku")));
int rows = 9;
int cols = 9;
String [][] strArr = new String[rows][cols];
for(int i = 0; i < rows ; i++){
for(int j = 0; j < cols ; j++){
strArr[i][j] = scanner.next();
}
}
scanner.close();
//Ausgabe in der Konsole zum Test
for(int i = 0; i < 9 ; i++){
for(int j = 0; j < 9 ; j++){
System.out.print(strArr[i][j] + " ");
}
System.out.println();
}
public void save(Board board) throws IOException {
// Erstellen eines Testfeldes, zur weiteren Überprüfung
private int [][] testSudoku =
{{0, 3, 4, 6, 7, 8, 9, 1, 2},
{6, 7, 2, 1, 9, 5, 3, 4, 8},
{1, 9, 8, 3, 4, 2, 5, 6, 7},
{8, 5, 9, 7, 6, 1, 4, 2, 3},
{4, 2, 6, 8, 5, 3, 7, 9, 1},
{7, 1, 3, 9, 2, 4, 8, 5, 6},
{9, 6, 1, 5, 3, 7, 2, 8, 4},
{2, 8, 7, 4, 1, 9, 6, 3, 5},
{3, 4, 5, 2, 8, 6, 1, 7, 9}};
try {
FileWriter writer = new FileWriter("D:/MySudoku.txt", true);
for (int x = 0; x < 9 ; x++) {
for (int y = 0; y < 9; y++) {
writer.write(Integer.toString(testSudoku[x][y]));
}
writer.write("\r\n");
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
In einer weiteren Klasse habe ich den ActionListener dazu implementiert:
Java:
buttonLoad.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent h) {
try {
inAndOutObj.load(boardObj);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
buttonSave.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent h) {
try {
inAndOutObj.save(boardObj);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});