GuiBuilder Plugins


Sie haben einen total schicken Kalender/HTML-Editor gebaut, und möchen den jetzt im GuiBuilder einsetzen?

Dann wird es Zeit, ein Plugin zu erstellen!

Hierzu müssen folgende Voraussetzungen erfüllt sein:

Plugin-Verzeichnis

Der GuiBuilder sucht nach Plugins im Unterverzeichnis "plugins"; dieses also ggf. anlegen.

Richten Sie im Verzeichnis "plugins" Ihr eigenes Verzeichnis ein, welches Ihr Plugin aufnehmen soll. Es ist eine gute Idee, diese mit einen Domain-Name zu versehen über den Sie selbst verfügen (com.myCompany.myPlugin).

Plugin programmieren

Erstellen Sie mit einer geeigneten Entwicklungsumgebung ihr Plugin.

Die zu erstellende Klasse muß eine Gui-Komponente des Gui-Frameworks erweitern. Suchen Sie sich als Superklasse die Klasse aus dem GuiBuilder Framework aus, deren Funktion Ihrer Komponente am nächsten kommt; wenn Sie z.B. einen Kalender programmiert haben, dann erweitern Sie GuiDate.

Wenn Ihre Klasse bereits von einer anderen Klasse erbt (z.B. JComponent), dann progammieren Sie eine neue Plugin-Klasse, die per Delegation auf Ihren Kalender zugreift.

Hier der Code für ein Beispiel-Plugin, bei dem durch Eingabe von "h" in einem Datumsfeld soll das Datum auf "Heute" gesetzt wird.

import java.util.Date;
import de.guibuilder.framework.GuiDate;

public class Datum extends GuiDate {
  /**
   * Verwandelt "h" oder "H" in ein heutiges Datum.
   */
  public void postProc() {
    if (this.getText().equalsIgnoreCase("h")) {
      Date d = new Date();
      this.setValue(d);
    }
  }
}

Die Methode postProc() wird vom GuiBuilder Framework immer dann aufgerufen, wenn der Anwender einen Wert eingegeben hat. Erst nachdem diese Methode durchlaufen wurde wird ihr Inhalt - hier auf ein gültiges Datum - validiert.

JAR-File erstellen

Erstellen Sie eine JAR-Datei mit Ihren Klassen und kopieren Sie dieses in Ihr Plugin-Verzeichnis.

Datei "plugin.xml" erstellen

Erstellen Sie eine Datei "plugin.xml" in Ihrem Verzeichnis.

Hier ein Beispiel, wie diese aufgebaut ist:

<?xml version="1.0" encoding="ISO-8859-1"?>

<plugin
  name="Example GuiBuilder Plugin"
  version="1.0"
  provider-name="Example Inc."
  <!-- In diesem Archiv sind die Klassen drin -->
  library="example.jar">
  <class
    <!-- Das ist der Name der zu ladenden Klasse -->
    name="de.guibuilder.test.ExampleText"
    <!-- Diese Klasse aus dem GuiBuilder-Framework wird erweitert -->
    extends="GuiText"
    <!-- Dieses Schlüsselwort wird dem GuiBuilder hinzugefügt -->
    keyword="Example1"
    >
    <!-- Diese Layout-Contraints werden vom GuiBuilder gesetzt -->
    <DefaultLayoutConstraints
      width="3"
      height="1"
      weightx="3"
      weighty="0"
      anchor="NW"
      fill="H"
      Insets.bottom="0"
      Insets.right="5"
      Insets.left="0"
      Insets.top="5"
    />
    <!-- Das Schlüsselwort erhält zusätzlich Attribute -->
    <Attribute
      <!-- Das ist das zusätzliche XML-Attribut -->
      name="selColor="
      <!-- Diese Methode soll aufgerufen werden -->
      method="setSelectionColor"
      <!-- Das ist der Typ des Arguments, in das das Argument konvertiert werden soll.
      In diesem Beispiel kann die Farbe auch im Format selColor="rrr,ggg,bbb" eingegben werden.-->
      argumentType="Color"
    />
    <Attribute
      name="text="
      method="setText"
      argumentType="String"
    />
  </class>
  <class name="de.guibuilder.test.Datum"
    extends="GuiDate"
    keyword="Datum"
  >
  <DefaultLayoutConstraints
    width="1"
    height="1"
    weightx="0"
    weighty="0"
    anchor="NW"
    fill="N"
    columns="7"
    horizontalAlignment="L"
    Insets.bottom="0"
    Insets.right="5"
    Insets.left="0"
    Insets.top="5"
  />
 </class>
</plugin>

Ausprobieren

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE GDL SYSTEM 'gdl.dtd'>
<GDL>
<Form label='Plugin Test'>
  <Datum label="Heute?:"/>
  <Example1 label="Eingabe:" selColor="0,255,0"/>
</Form>
</GDL>


Risiken und Nebenwirkungen

Erste Messungen scheinen zu belegen, daß die Performanz beim Aufbau eines Fensters nicht durch den Einsatz von Plugins leidet.

Es fehlt eine Konzept , wie die gdl.dtd um die zusätzlichen Schlüsselworte ergänzt wird.

Z.Z. können leider nur die folgenden GuiBuilder-Klassen erweitert werden:



Stand : 16.11.2003