Das Action
-Interface ist eigentlich eine recht gute Grundidee. Eine von einem Programm ausführbare Funktion wird abstrahiert als Action verpackt und kann dann z.B. einem Button und/oder einem Menü zugeordnet werden. Leider reicht die Implementation der Standard-Klassen vorne und hinten nicht aus, um komfortabel zu arbeiten.
Eine Action abstrahiert so etwas wie eine Menüfunktion. Diese Action kann dann z.B. als Menüpunkt in ein Menü oder ein Popupmenü eingefügt werden oder als Button in eine Toolbar. Idealerweise sollte dabei ein und dieselbe Action an mehreren Stellen des Programms benutzt werden können. Ebenso idealerweise sollten Actions aktiviert und deaktiviert werden, so daß ein Menüpunkt "eingegraut" wird, wenn die zugehörige Action gerade nicht ausführbar ist. Eine schöne Einführung in das Thema gibt es im Java-Tutorial How to use Actions?
.
Meiner Meinung nach fehlt es an einem Framework, um Actions anständig zu verwalten. Hierzu ein paar Gedanken:
Ich möchte Gruppen von Actions haben, die ich z.B. fertig als Menübaum oder als Toolbar vorkonfigurieren kann. In solch einem Baum muss man auf einzelne Actions zugreifen können, man muss Actions nachträglich an die richtige Stelle einfügen können, etc.
Es fehlen natürlich auch fertige Methoden, um aus einer Gruppe Actions dann auch wirklich GUI-Elemente wie Menüs, Toolbars oder Popups zu erzeugen.
Man sollte solche Gruppen von Actions kombinieren können. D.h. ich habe ein Fenster, das ein Menü mit Punkten wie "Ende", "Neues Dokument" enthält. Öffne ich nun ein Dokument, so ergeben sich hieraus zusätzliche Actions, die dann quasi als Plugin in das vorhandene Menü bzw. die Toolbar eingearbeitet werden. Wird das Fenster wieder geschlossen, verschwindet ds Plugin wieder.
Es gibt auch einige interessante Ansätze zur Konfiguration von Actions. Das SAF arbeitet mit Annotations für die Grundlagen und mit Properties-Dateien für Werte wie Menütext, Icon, etc. Man kann nicht ohne diese Properties-Datei arbeiten, was ich etwas lästig finde. SAM arbeitet mit einer XML-Datei und alternativ mit Java-Befehlen (also ganz von Hand). Meine persönliche Meinung ist, daß solche Daten immer mit in den Code gehören, mit dem sie sich beschäftigen, also wäre ich eher für Annotations. Dabei wäre eine Überladung durch Properties z.B. zur Lokalisierung jedoch durchaus wünschenswert.
Eine Action ist nach meinem Verständnis eigentlich immer eine auszuführende Funktion oder Methode. Dafür ist die vorhandene Klassen-Schnittstelle eigentlich nicht ideal. Ich fände einen Mechanismus zur Abbildung auf eine Methode wünschenswert, ohne daß man für jede Action eine eigene Klasse definieren muss (das gelingt z.B. im SAF durch annotierte Methoden, aus denen automatisch Actions generiert werden).
- Wird von Netbeans unterstützt; soll in Java 7 integriert werden
- Sehr gut durchdachtes Framework
SAM ist scheinbar sehr gut durchdacht. Vor allem habe ich nach dem Lesen des Tutorials den Eindruck, daß jede Komponente für sich sinnvoll durchdacht ist aber auch ersetzt oder erweitert werden kann. Es geht davon aus, daß man seine Actions als XML-Datei(en) oder als Java-Code definiert. Einen Generator, der stattdessen Annotations benutzt, sollte leicht zu schreiben sein. Die letzten Schreibzugriffe ins CVS sind leider ca. 2 Jahre alt und eine Mailingliste o.ä. war nicht zu finden.
Will jemand bei der Suche nach dem idealen Framework bzw. beim Erstellen desselben mitmachen?!?