GUI-Building

Aus SibiWiki
Zur Navigation springen Zur Suche springen


  • GUI = graphical user interface.
  • Hier wird beschrieben, wie man einfach grafische Oberflächen bauen kann.

Diese Seite ist noch im Aufbau.

Trennung von Logik und GUI

Es ist absolut empfehlenswert, die Logik und die GUI auf zwei Klassen aufzuteilen.

Dafür muss eine 1:1-Beziehung zwischen der Logik und der GUI bestehen:

Gui-logik-klassendiagramm.png

Erläuterung:

  • Jedes Objekt der GUI-Klasse kennt ein Objekt der Logik-Klasse.
  • Jedes Objekt der Logik-Klasse kennt ein Objekt der GUI-Klasse.
  • Das Objekt der Logik-Klasse besitzt (in der Regel) das Objekt der GUI-Klasse. Hier ist einfach die Frage zu beantworten: Wer ist zuerst da?

Es ist notwendig, dass sich die beiden Klassen gegenseitig kennen, damit sie in der jeweils anderen Klasse Methoden aufrufen können.

Implementierung

Im Java-Quellcode sieht das dann so aus:

Logik-Klasse:

 import java.util.Vector;

 public class CelebritiesLogik {
   private Vector<Person> celebritiesVector;
   private CelebritiesGUI gui;
   
   public CelebritiesLogik(Person[] celebritiesArray){
       celebritiesVector = new Vector<Person>();
       for (int i = 0; i < celebritiesArray.length; i++) {
           celebritiesVector.add(celebritiesArray[i]);
       }
       gui = new CelebritiesGUI(this);
       gui.setVisible(true);
   }
   
   public static void main(String[] args) {
       Person[] celebrities = Celebrities.celebritiesArray();
       CelebritiesLogik cl = new CelebritiesLogik(celebrities);
       
   }
 }

GUI-Klasse:

 import javax.swing.WindowConstants;
 import javax.swing.SwingUtilities;

 public class CelebritiesGUI extends javax.swing.JFrame {
   private CelebritiesLogik celebritiesLogik;
 
   public CelebritiesGUI(CelebritiesLogik celebritiesLogik) {
       super();
       this.celebritiesLogik = celebritiesLogik;
       initGUI();
   }
   
   private void initGUI() {
       try {
           setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
           pack();
           setSize(400, 300);
       } catch (Exception e) {
           //add your error handling code here
           e.printStackTrace();
       }
   }
 }

Erläuterung:

  • Jede Klasse hat ein Attribut für ein Objekt der jeweils anderen Klasse.
  • Der Konstruktor der 'GUI-Klasse hat einen Parameter für ein Objekt der Logik-Klasse; dieser Parameter wird in das Attribut eingetragen.
  • In der Logik-Klasse wird im Konstruktor ein Objekt der GUI-Klasse erzeugt.
  • Beim Erzeugen übergibt die Logik-Klasse eine Referenz auf sich selbst: new CelebritiesGUI(this)

So sind dann die beiden Klassen miteinander bekannt!