Ein Toolset zur Verwaltung von Java Swing Actions.
Zentraler Bestandteil ist die Definition von Commands per Property-Datei. Eine typische Command-Property Datei sieht folgendermaßen aus:
common.ok@id = ok common.ok@face.text = &Ok common.ok@face.description = Ok drücken common.ok@face[menu].text = &Ok common.ok@face[button].text = &Ok common.ok@face[toolbar].text = common.save@id = save common.save@face.text = &Speichern common.save@face[toolbar].text = common.save@face.accelerator = control S common.save@face.icon = classpath:/de/gluehloch/swinger/icon/save_16.gif common.save@face.icon_large = classpath:/de/gluehloch/swinger/icon/save_24.gif common.delete@id = delete common.delete@face.text = &Löschen common.delete@face[toolbar].text = common.delete@face.icon = classpath:/de/gluehloch/swinger/icon/delete_16.gif common.delete@face.icon_large = classpath:/de/gluehloch/swinger/icon/delete_24.gif
Im Beispiel definiert alles vor dem @ einen Command-Key. Diesem Command-Key sind verschiedene Eigenschaften zugeordnet.
common.ok@id = ok
Die Eigenschaft id kennzeichnet eine Swing-Kompoenente. Über die Methode java.awt.Component#setName(...) erhält die Komponente die Kennzeichnung.
common.ok@face.text = &Ok common.ok@face[toolbar].text = Toolbar &Ok
Die Eigenschaft face definiert die Oberflächeneigenschaften des Commands. Ein face ist in die Kategorien [menu], [button] und [toolbar] eingeteilt. In dem Beispiel oben würde ein Command im Toolbar-Einsatz den Text 'Toolbar Ok' anzeigen, während für die restlichen Faces der Text 'Ok' gilt.
Per Default ist id@face[toolbar].text auf null gesetzt. D.h. diese Eigenschaft erbt nicht die Defintion aus face.text.
Weitere Oberflächeneigenschaften sind icon, icon_large und accelerator.
common.delete@face.icon = classpath:/de/gluehloch/swinger/icon/delete_16.gif
Zulässige Resourcen Angaben sind: classpath, file und url.
Im Code angewendet sieht das dann folgendermaßen aus:
CommandLoader.load("commands.properties");
...
ActionCommand actionCommand = new ActionCommand("common.ok") {
public void execute() {
// do something...
}
};
Über die Methoden createMenuItem() und createButton() wird eine Swing Komponente mit Bindung an das ActionCommand hergestellt.
JButton button = actionCommand.createButton();
Das Prefix group! leitet die Definition einer CommandGroup ein.
group!file-menu@id = file_id group!file-menu@face.text = &File group!file-menu@members = common.ok, common.save, common.delete, common.save-as,\ common.separator, common.exit
Der CommandGroup sind die Member common.ok, common.save, common.delete, common.save-as, separator, common.exit zugeordnet. separator bezieht auf kein ActionCommand, sondern steht hier stellvertretend für eine zu zeichnende Linie zwischen den ActionCommands.
CommandLoader.load("commands.properties");
...
ActionCommand actionCommand = new ActionCommand("common.ok") {
public void execute() {
// do something...
}
};
CommandLoader.bind(okCommand);
// Selbiges mit den restliche ActionCommands!
...
CommandGroup fileGroup = new CommandGroup("file-menu");
CommandBindings.bind(fileGroup);
JMenu fileMenu = fileGroup.createMenu();
Über die Methode CommandBindings#bind() müssen alle ActionCommands und CommandGroups registriert sein.