Pronux Wiki
Menu

RCPActionFramework

Übersicht

Action Konfiguration

Die commands-context.xml Datei

Die Datei The command-context.xml ist eine Spring Context Datei und enthält die Definitionen aller global Actions, die Menubar und die Toolbar.

Die visuelle Seite

Jede Action benötigt eine eineindeutige ID. Diese ID wird zum laden visueller Informationen genutzt, um die Action auf dem Bildschirm zu rendern.

Angenommen man besitzt einen Öffnen Command, welcher +O+ pen als Label besitzt (Mit O als mnemonic), welcher auf Ctrl-O auslöst, dann sehen die Einträge in der messages.properties Datei folgendermaßen aus: (Das caption Attribut definiert den Tooltiptext für die Action)

openCommand.label=&Open@ctrl O
openCommand.caption=Open the selected item(s)

Beschriftung (Label)

Das Label Attribut kann entweder ein Label ohne mnemonic (Open) sein, oder ein Label mit mnemonic (&Open) und einem optionalen @accelerator Eintrag.

Shortcut (Accelerator key)

Eine accelerator Zeichenkette muss der folgenden Syntax entsprechen:

<modifiers>* (<typedID> | <pressedReleasedID>)

modifiers := shift | control | ctrl | meta | alt | button1 | button2 | button3
typedID := typed <typedKey>
typedKey := string of length 1 giving Unicode character.
pressedReleasedID := (pressed | released) key
key := KeyEvent key code name, i.e. the name following "VK_".

Siehe auch KeyEvent für mögliche key code Namen.

Beispiele:

  • INSERT
  • control DELETE
  • alt shift X
  • F5

Titel (Caption)

Das caption Attribut wird als Tooltip für die gerenderte Action genutzt.

Icon

Um ein Icon mit der Action zu verknüpfen, muss man folgenden Eintrag zur Datei images.properties hinzugefügt werden:

openCommand.icon=open.gif

Falls das angegebene Icon nicht gefunden werden kann, wird ein broken image indicator verwendet.

Die Controller (Handler) Seite

Um eine Action zu implementieren muss man die Klasse ActionCommand ableiten und die MethodedoExecuteCommand} überschreiben.

Beispiel

Die Zeichenkette, welche zum Super-Konstruktor weitergeleitet wird, stellt die ID des Commands dar und wird genutzt, um nach den Labeln und Icons zu suchen.

public class RenameCommand extends ActionCommand 
{
 public RenameCommand() 
   {
     super("renameCommand");
   }

 protected void doExecuteCommand() 
   {
    // do whatever your command has to do
   }
}

Man kann auch einen ActionCommandExecutor implementieren, falls das Ableiten der ActionCommand Klasse keine Option darstellt. Der NewOwnerWizard zum Beispiel verfährt so, um die Logik für das Öffnen des NewOwnerWizard Dialogs zu kapseln.

Mit diesem Ansatz nutzt man eine Komposition einer TargetableActionCommand Instanz, indem man den Executor für den targetable Action Command setzt (sogar wenn der Commad selbst nicht retarget wird nach dem Startup).

Action Bar Contribution Policies

To Menus

To ToolBars

Group Markers and Separators

Global Actions

Globale Commands sind Commands, die nur im Fenster ihre Gültigkeit besitzen. Sie werden in der Datei commands-context.xml definiert.

Die dort definierten Commands werden in der Command Registry des instaziierenden Fensters registriert. Sie bestehen typischerweise aus:

  1. Targetable Commands, deren ausführende Implementierung durch die Registrierung eines Command Executors geändert werden kann, zum Beispiel: "delete", "selectAll", oder "properties."
  2. Andere Commands, die durch die Command Gruppen des instanziierenden Fensters genutzt werden: Menubars, Toolbar, etc.

Es gibt einige globalen Standard Commands, welche in der GlobalCommandIds Klasse definiert sind.

Die definierten globalen Actions sind:

  • cut
  • copy
  • paste
  • undo
  • redo
  • save
  • save as
  • select all
  • delete
  • properties
  • run

Handler Registrierung

Siehe Views für Beispiele.

Interaktion mit der middle-tier

PopupMenus erzeugen

Um ein contextbasiertes PopupMenu zu Erzeugen, kann man die PopupMenuMouseListener Hilfsklasse nutzen.

Der PopupMenuMouseListener kann auf zwei unterschiedliche Arten genutzt werden:

  1. Man nutzt ein statisches PopupMenu
Hierfür nutzt man den Konstruktor um ein statisches PopupMenu zu übergeben:
JTree tree = ...;
JPopupMenu popupMenu = ...;
tree.addMouseListener(new PopupMenuMouseListener(popupMenu));
  1. Man nutzt ein dynamisches PopupMenu

Hierfür erzeugt man eine anonyme innere Klasse, welche ein PopupMenu zurückgibt, abhängig von extenrnen Faktoren.


JTree tree = ...;
tree.addMouseListener(new PopupMenuMouseListener() 
 {
  protected JPopupMenu getPopupMenu() 
   {
    // create your popup menu here based on the selection
   }
 }
);

Um ein PopupMenu zu erzeugen muss man zuerst eine CommandGroup erzeugen. Die CommandGroup hat Hilfsmethoden zum erzeugen einer ToolBar, eines PopupMenus etc. etc.

CommandGroup group = getWindowCommandManager().createCommandGroup("ownerCommandGroup",
             new Object[] { renameCommand, "separator", "deleteCommand", "separator", "propertiesCommand" });

JPopupMenu poupMenu = group.createPopupMenu();

So könnte man 2 unterschiedliche CommandGroups erzeugen (zum Beispiel eine für Kunden, eine für Bestellungen), und das passende PopupMenu für den ausgewählten Knoten im Baum zurückgeben, oder man erzeugt ein statisches Popupmenu wenn man mit einer Tabelle arbeitet.


Go to top   Edit this page.   More info...   Attach file...

This page last changed on 10-Nov-2006 13:29:50 CET by PeterSchneider-Manzell.