Logik in Java von GUI trennen?

4 Antworten

Benutze am besten das Model-View-Controller-System. Das heißt, du hast einen Controller, der dein Programm steuert. Der steuert die View, die Anzeige. Beide haben Zugriff auf das Model, den Speicher; aber nur der Controller darf die Daten verändern.

Dein Model hält, für ein Spielfeld, ein mehrdimensionales Arrays. Die View hält ein JButton-Array der selben Größer. Jedes Mal, wenn die View neu lädt, holt sie die Daten für die Buttons aus dem Model. Möglicherweise kennt auch jeder Button sein Darstellung im Model.

Du kannst rein theoretisch das 'Klassische' MVC (Model-View-Control) Muster verwenden um deinen Code entsprechend zu strukturieren. - Aber das versuchst du ja bereits. - Du scheiterst eher am direkten umsetzen.

Was ich nur etwas vermisse: Du hast ein Spielbrett - Wie flexibel verhält es sich mit den Spielfeldern? Können es mal mehr, mal weniger Felder sein? Sind die Felder 'fest' ?

Gehen wir mal von einem 3x3 Spielfeld aus, das Fix ist. (Tic-Tac-Toe).

So könnte man, wie im Borderlayout die Buttons per Himmelsrichtung benennen um deren Position festzustellen.

Dein View, in dem du nur den Grafischen Teil behandeln willst, würde für die entsprechenden Felder Getter bereit stellen:

public class Spielbrett {
   
   private JButton buttonSouth, buttonNorth, buttonEast; // usw.

   public JButton getButtonSouth() { return this.buttonSouth; }
}

Dein Controller, in dem du die Logik implementieren würdest, hätte dann das Spielbrett als Eigenschaft:

public class Spiel {

   private Spielbrett spielbrett;

}

Hier kannst du dann auch deine Logik der Buttons implementieren:

private void init() {
    this.spielbrett.getButtonSouth().addActionListener(...);
}

Einfachste Idee: Klasse für das Spielbrett die alles dazugehörige macht und dann beim Button click einfach eine Methode des Spielfelds aufrufen und dann halt je nach Rückgabe der Spieleklasse GUI anpassen.

Woher ich das weiß:Studium / Ausbildung – Informatikstudium