BeanDev: Eigene Options - Hauptkategorien mit Annotationen
Wenn man mit Annotationen in der NetBeans Platform arbeitet bekommt man eine deutliche Erleichterung, da man weniger in den layer.xml Dateien arbeiten muss. Trotzdem gibt es noch kleinere Fallstricke.
Möchte man dem Optionen-Dialog eine eigene Haupt-Kategorie zuordnen, in der Unterkategorien registriert werden dürfen (wie es die Verschiedenes-Kategorie zeigt), muss man eine besondere Form der Annotation verwenden: Die package-level Annotation @OptionsPanelController.ContainerRegistration.
Diese Annotation muss vor der package Deklaration angegeben werden:
@OptionsPanelController.ContainerRegistration(
id="SepixBaseOptions",
categoryName = "#OptionsCategory_Name_SepixBase",
iconBase = "de/sepix/core/options/base/s-logo_32.png",
keywords = "#OptionsCategory_Keywords_SepixBase",
keywordsCategory = "SepixBase", position=10)
package de.sepix.core.options.base;
import org.netbeans.spi.options.OptionsPanelController;
Alte Java-Hasen werden sagen, dass das niemals eine vollständige Java-Datei sein kann, die compilierbar wäre. Das ist auch tatsächlich so. Es fehlt nämlich eine Klasse in dem Quelltext. Damit der Compiler nicht mit Fehler aussteigt, muss diese Datei eine ganz bestimmte Namenskonvention haben: sie muss package-info.java heißen.
Damit kommen wir zum nächsten Fallstrick. Der New File... Assistent für Java-Klassen erlaubt es nicht, einen solchen Namen zu verwenden. Man muss also das Empty File Template nehmen, als Namen package-info.java eintragen und die Datei mit der ContainerRegistration-Annotation bestücken.
Hat man ein passendes Icon und die Bundle.properties Datei im selben Package, erscheint tatsächlich eine leere Kategorie im Optionen-Dialog.
Jetzt kann man mit dem Assistenten weitere Sub-Kategorien erzeugen. Diese Sub-Kategorien erhalten als Primärpanel die ID des obigen Beispiels (man wählt also nichts aus der Combobox aus, sondern gibt die ID von Hand ein).
Man erhält damit den Panel-Controller und das GUI als Panel. Die Annotation zum Controller sieht dann so aus:
package de.sepix.core.options.base.db;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import javax.swing.JComponent;
import org.netbeans.spi.options.OptionsPanelController;
import org.openide.util.HelpCtx;
import org.openide.util.Lookup;
@OptionsPanelController.SubRegistration(location = "SepixBaseOptions",
displayName = "#AdvancedOption_DisplayName_Database",
keywords = "#AdvancedOption_Keywords_Database",
keywordsCategory = "SepixBase/Database")
public final class DatabaseOptionsPanelController extends OptionsPanelController {
Wichtig ist, dass location der id des Containers entspricht.
Die Bundle-Datei wurde schon vom Assistenten angelegt. Hier mal ein Screenshot, wie die Optionen nun aussehen (könnten):
Beste Grüße,
Josch.
Da werden Sie geholfen:
Das deutsche NetBeans Forum
![Validate my RSS feed [Valid RSS]](http://www.sepix.de/fileadmin/valid-rss.png)