Java Getriebe

Java und NetBeans

Matisse: Grundlagen: Eine einfache Eingabemaske

Dieser erste Teil meiner kleinen Matisse Serie soll sich einfach nur damit beschäftigen, wie man den GUI Builder aufruft und welchen Quellcode wir von dem Tool generiert bekommen. Aber zunächst einmal die Frage nach dem „Warum“. Warum soll ich einem Tool meinen Sourcecode erzeugen lassen – der wenig übersichtlich ist – wenn ich doch selber schönen sauberen Code schreiben kann und dabei auch noch vollständig kontrollieren kann was ausgeführt wird? – Eine durchaus berechtigte Frage.

Es ist wahr, dass der Quelltext, die der Matisse GUI Builder erzeugt auf den ersten Blick unübersichtlich und ineffizient erscheinen mag. Ich kenne wenige Personen, die solche einen Code erzeugen würden und würde einer meiner Azubis so etwas abliefern wäre wieder eine meiner Predigten über lesbaren Quelltext fällig. Aber zum einen ist dieser generierte Quelltext nicht dazu gedacht von irgendwem gelesen zu werden (nicht umsonst blendet NetBeans den generierten Teil aus) und zum anderen liegt dies auch am Standardmäßig verwendeten GroupLayout. Dieser alles andere als triviale LayoutManager zwingt einen geradezu unübersichtlichen Code zu erstellen. Aber dieser LayoutManager ist auch nicht wirklich dafür gedacht „von Hand“ verwaltet zu werden sondern für genau solche Anwendungen wie dem Matisse GUI Builder.

Und gerade dieser LayoutManager ist es, welcher uns „schnell und einfach“ Eingabemasken erstellen lässt und uns verzweifeln lässt, wenn die Elemente auf einmal anfangen „rumzuspringen“. Aber diese Problematik möchte ich in einem späteren Beitrag nochmal genauer besprechen. Kommen wir zu den interessanten Dingen, wie: Wo fange ich an?

new matisse classUm eine neue Eingabemaske mit dem GUI Builder zu beginnen muss man lediglich im Kontextmenü des gewünschten Zielpakets auf „Neu“ und „JPanel Formular“ klicken, im Assistenten kurz den Klassennamen der Eingabemaskte eingegeben und schon taucht ein neuer Eintrag im Projektbaum auf. Der neuen Eintrage hat ein eigenes Symbol durch das die Eingabemasken recht einfach von „normalen“ Java Klassen zu unterscheiden sind. Der Editorbereich zeigt uns ein hübsches graues JPanel und es taucht ein neues Fenster mit dem Titel „Palette“ auf.

Dort sind alle möglichen Element aufgeführt, die direkt im Matisse genutzt werden können. Es sind einfache Elemente wie ein JLabel („Marke“ zu deutsch) oder JTextFields, aber auch JTree, JTables oder diverse Container, die in Swing auch sonst verfügbar sind.
new matisse labelnew matisse textfield Die Elemente können einfach per Drag und Drop in das anfangs leere Panel gezogen werden. Sobald das gewünschte Element über dem Panel ist tauchen an den verschiedensten Stellen Hilfslinien auf. Das Label kann so schön in der oberen linken Ecken platziert werden und hat einen vordefinierten Standardabstand zum Rand des Panel. Genauso kann das Textfeld exakt an dem Label ausgerichtet werden. Kein lästiges Abzählen von Pixeln oder programmiertechnisches rumfummeln mit Basislinien und Textlängen. Selbst nachträgliches verschieben der Elemente ist kein Problem.

Schauen wir uns den Quelltext ((Die Button „Quelle“ und „Entwurf“ in der Toolbar des Editorfensters schalten zwischen den beiden Ansichten um)) anschauen ist eine schön übersichtliche Klasse zu sehen. Nur der Text „Generated Code“ deutet an, dass da noch mehr ist. Dieser Bereich des Quelltextes wird von NetBeans standardmäßig immer ausgeblendet. Es ist auch nicht möglich direkt in diesem Bereich etwas zu ändern. Wie ich in einem späteren Beitrag noch erzählen werde ist dies auch nicht notwendig. Auch ein zweiter Bereich wird von NetBeans vor Änderungen geschützt. Hier legt das Tool für jedes Element, welches wir in den Editor ziehen eine eigene Variable an. Über diese Variable lässt sich ganz normal wie sonst auch in Swing die Elemente auslesen oder bearbeiten.

Es wird in der Klasse ein einfacher Konstruktor erzeugt, in dem die Methode initComponents() aufgerufen. Diese Methode ist im generierten Bereich des Quelltextes deklariert und enthält die notwendigen Javabefehle um die Eingabemaske zu erzeugen wie sie im Editor zusammengeklickt wurde. Nach diesem Methodenaufruf können alle Variablen der Elemente verwendet werden. Sie sind alle initialisiert und so vorbesetzt wie im Editor eingestellt.

Der Quelltext, den der Editor erzeugt ist komplett valider Java Swing Code und kann genauso wie selber geschriebener Code eingesetzt werden. Dass heißt, dass man keine zusätzliche Klasse oder Bibliothek braucht, wenn man diese Eingabemaske in seinen Anwendungen einsetzen möchte. Wirklich keine.