GUI-Building

Aus SibiWiki
Version vom 11. April 2014, 06:51 Uhr von Akaibel (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Kategorie:Informatik * GUI = graphical user interface. * Hier wird beschrieben, wie man einfach grafische Oberflächen bauen kann. ''Diese Seite ist noch…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
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 besitzt (und kennt) ein Objekt der GUI-Klasse. Die Logik-Klasse ist der Besitzer, weil sie in der Regel zuerst da ist!

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!