GUI.java ändert die Textfields nicht

11/28/2015 14:56 EinfachSö#1
Hi,

Also bevor ich bisschen Code poste schildere ich mein Problem. Ich schreibe als kleine Übung ein Programm, dass Sudokus lösen kann. Ich habe zwei Klassen.
Die eine ist die Main-class in der Main.java. In ihr geschieht das Lösen des Sudokus. Das klappt alles super.
Die zweite ist die GUI-class in der GUI.java. In ihr modelliere ich halt das GUI. 9x9 Textfields und ein Button zum Starten des Ganzen.
Das Programm liest die Textfields aus(wenn beschriftet) und gibt diese an die Main.java weiter und dort geschieht dann der Rest. Zum Schluss rufe ich die Methode writeSudoku(array) auf, welche sich ebenfalls in der GUI.java befindet und die Textfelder nun mit der Lösung beschriften soll.

GUI.java:

Die Main.java ist irrelevant, da dort alles super verläuft.
Ganz unten in der GUI.java "System.out.println(String.valueOf(array[i][j]));" habe ich eingefügt um zu kontrollieren ob das entgegengenommene Array die Zahlen enthält. Tut es! Es muss daran liegen, dass ich die writeArray()-Methode aus einer anderen Klasse aufrufe und Java mit dem allField[i][j] nicht zurechtkommt.

Anmerkung:

Ich verstehe aber nicht warum dies so ist und auch nicht wie ich das umgehen kann.


Main.java (wen es interessiert):
11/28/2015 16:40 algernong#2
In deiner main() Methode erstellst du ein GUI Objekt und zeigst es an. Das ist das Fenster, das du siehst. Jetzt löst du das Sudoku und schreibst in deiner Main.java, am Ende von startSolving:
Code:
		GUI endSudoku = new GUI();
		endSudoku.writeSudoku(workArray);
Du erstellst also nochmal ein neues GUI Objekt, ein neues Fenster. Das wird aber nicht aufgerufen, weil du kein setVisible() machst. Deswegen passiert (anscheinend) nichts.

Wenn du die Lösung im selben Fenster anzeigen möchtest, musst startSolving() dein GUI Objekt als Parameter mit übergeben. Anstatt endSudoku = new GUI() nutzt du dann das übergebene Objekt, um die Lösung einzutragen.

Also ungefähr so:
Code:
public void startSolving(int[][] array, GUI gui) { 
    // ..... Code
    gui.writeSudoku(workArray);
}
und in GUI ersetzt du
Code:
start.startSolving(array);
durch
Code:
start.startSolving(array, this);
11/28/2015 16:59 EinfachSö#3
Quote:
Originally Posted by algernong View Post
Du erstellst also nochmal ein neues GUI Objekt, ein neues Fenster. Das wird aber nicht aufgerufen, weil du kein setVisible() machst. Deswegen passiert (anscheinend) nichts.
Ah! Vielen Dank.
Ich übernehme dann mal deinen Code ;) Das dürfte "schöner" geschrieben sein.