...
Der Action Name, bzw. Accessible Name kann wiederum im nachfolgend Dargestellten "Erstellung der Policy anhand der Action Names" verwendet werden.
Beispiel:
Codeblock | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
// Store a list of references to the swing components List<AtomicReference<Component>> result = new ArrayList<>(); // Accessible names we want to look for in the hierarchy String[] strings = { "Dokument drucken", "Dokumentinfo", // derived from action.properties "Linie" // derived from default-annotation-profile.xml }; // Get the references from the traversal for (String s : strings) { result.add(walkComponents((Container) root, s)); } // Pass the references as input for the policy FocusTraversalPolicy policy = new HierarchyFocusTraversalPolicy(result); |
...
Im falle der AnnotationsToolbar, die dynamisch anhand des verwendeten annotation profile erstellt wird, kann der AccessibleName aus dem annoprofil ausgelesen werden (siehe Codebock "Auszug aus dem default-annotation-profile.xml"). Hierfür muss der Wert des attributes name (@name="Line") als AccessibleName verwendet werden (siehe Zeile 1). Beispiel:
Codeblock | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<annotation-type name="Line" archetype="Line" class="com.levigo.jadice.annotation.LineAnnotation"> <renderer toolkit="swing" class="com.levigo.jadice.annotation.internal.renderer.LineAnnotationRenderer"/> <wrangler toolkit="swing" class="com.levigo.jadice.swing.internal.annotation.wranglers.LineAnnotationWrangler"/> <renderer toolkit="gwt" class="com.levigo.jadice.web.client.renderer.internal.annotation.LineAnnotationRenderer"/> <wrangler toolkit="gwt" class="com.levigo.jadice.web.client.internal.annotation.wrangler.LineAnnotationWrangler"/> <labels> <label locale="en">Line</label> <label locale="de">Linie</label> <label locale="fr">Ligne</label> <label locale="it">Linea</label> </labels> ... </annotation-type> |
...
Integrationsmöglichkeit der eigenen Focus Traversal Policy
Setzen einer Policy
Um eine FocusTraversalPolicy zu setzen muss man nur die Policy auf der gewünschten Komponente setzen. Werden in der selben Hierarchie mehrere Komponenten mit einer Policy besetzt, so wird bei einem FocusTraversal diese Policies zunächst ignoriert. Wenn man die Beachtung dieser Policies wünscht so kann man wie in dem gezeigten Beispiel es als PolicyProvider markieren. Dann wird bei einer Suche dessen Policy ebenfalls zur Anwendung kommen, falls diese Komponente zurückgegeben wird bei einer Suche.
Codeblock | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
// create a sample hierarchy with a frame that has a panel which has 2 buttons JFrame frame = new JFrame(); JPanel panel = new JPanel(); JButton comp1 = new JButton(); JButton comp2 = new JButton(); frame.add(panel); panel.add(comp1); panel.add(comp2); // set a FocusTraversalPolicy on the root of the hiearchy frame.setFocusTraversalPolicy(new ExampleTraversalPolicy()); // set a different Policy on the panel. By default it will not be used when the frame has the focus and it receives a focus change panel.setFocusTraversalPolicy(new ExamplePanelTraversalPolicy()); // by setting it as provider its policy wil will be taken into account when the panel is the component that should receive the focus next panel.setFocusTraversalPolicyProvider(true); |
Eigene FocusTraversalKeys verwenden
Standardmäßig wird TAB
verwendet, um bei der Komponente einen Fokuswechsel zur nächsten zu bewirken. Dies kann man durch das Setzen eigener Keys überschreiben. Über ein flag kann dabei gesteuert werden, ob die Komponente die Events des gesetzten Key
Möglichkeiten und Grenzen
...