2011-11-28

Ultimate Swing, Teil 3

Ich habe die Anwendung ein kleines bisschen erweitert. Auf einer dritten Registerkarte können nun Kategorien angezeigt und (später) bearbeitet werden.

Screenshot der Version vom 28.11.2011
Screenshot der Version vom 28.11.2011

TKNotesAndTasks steht übrigens unter der GNU General Public Licence version 3, ist also open source. Das am Ende des Posts verlinkte Archiv enthält wie üblich alle Quelltexte. Ich habe begonnen, die Dateien mit einem Hinweis auf die GPL zu versehen. Und so langsam trudeln auch die ersten Javadoc-Elemente ein.
Smiley

Lassen Sie uns nun nochmals einen Blick auf die Struktur des Programms werfen. Eine einfache Starter-Klasse (Main) ruft Application.boot() auf. Application ist ein Singleton, das korrespondierende Objekt repräsentiert also die Anwendung. Aber: Application enthält keine programmspezifischen Funktionen. Diese sind in einer Klasse enthalten, die das Interface ApplicationCallback implementiert. Eine Instanz dieses Typs wurde in Main erzeugt und an boot() übergeben. ApplicationCallback definiert – das hatte ich bereits geschrieben – Lebenszyklusmethoden, die von Application zu bestimmten Zeiten aufgerufen werden. Seit der ersten Fassung ist eine neue hinzugekommen: preCreateGUI(). Wir werden diese bald benötigen, um Daten zu laden. Dies geschieht quasi-parallel zum Aufbau der Benutzeroberfläche. Hierfür wiederum ist createGUI() zuständig. Lassen Sie uns nun einen Blick auf die entsprechende Implementierung werfen:

  public static synchronized void boot(String[] args, String bundleBaseName,
      ApplicationCallback cb) {
    if (INSTANCE != null) {
      throw new IllegalStateException(
          "boot() must not be called more than once");
    }
    INSTANCE = new Application(args, bundleBaseName, cb);
    Thread t = new Thread(new Runnable() {
      @Override
      public void run() {
        INSTANCE.callback.preCreateGUI(INSTANCE.args);
      }
    });
    t.start();
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        INSTANCE.configureFrame();
        INSTANCE.setVisible(true);
      }
    });
  }

In dieser Version erledigt die Methode boot() drei Aufgaben.

  1. Instantiieren eines Objekts vom Typ Application
  2. Erzeugen und Starten eines Threads, der die Methode preCreateGUI() aufruft
  3. Ausführen der beiden Aufrufe configureFrame() und setVisible()

Und worin liegt der Unterschied zwischen 2) und 3)? Der Event Dispatching Thread wird Sie bei der Arbeit mit Swing noch oft begleiten. In Vorbereitung auf den nächsten Post können Sie sich schon einmal warm googlen.
Smiley

Quelltexte zu TKNotesAndTasks vom 28.11.2011

No comments:

Post a Comment