Hallo,
ich habe aus diesem Beispiel die FocusTraversalPolicy übernommen, um eine andere Tab-Reifenfolge zu erreichen, als normal durch die LayoutFocusTraversalPolicy festgelegt wäre.
Ich besitze ein Fenster, auf welchem im zwei JPanels übereinander angeordnet sind. Auf dem oberen JPanel habe ich von links nach rechts ein Textfeld, eine Combobox und einen Button. Nun hätte ich gerne, dass nach Betätigen von TAB im Textfeld, der Focus aus diesem JPanel springt und folglich ins untere JPanel springt. Mit der Standard-Policy ist dies der Fall, nachdem ich auf dem Button die TAB-Taste drücke.
Ich habe nun also diese Klasse implementiert und die folgende Liste erstellt {ComboBox, Button, Textfeld}, in der Hoffnung, dass nun nach dem Textfeld aus dem JPanel gesprungen wird und mit der TAB-Reihenfolge des JFrames weitergemacht wird. Leider tabbe ich aber nun zyklisch im Kreis, also ComboBox -> Button -> Textfeld -> ComboBox.
Ich hatte schon versucht, bei
zu überprüfen, ob die nächste Komponente wieder die erste wäre und dann null zurück zu geben, in der Hoffnung, dass der Fokus dann aus dem Panel springt, aber das brachte nicht den erwünschten Erfolg.
Weiß da jemand weiter?
Grüße,
Patrick
ich habe aus diesem Beispiel die FocusTraversalPolicy übernommen, um eine andere Tab-Reifenfolge zu erreichen, als normal durch die LayoutFocusTraversalPolicy festgelegt wäre.
Ich besitze ein Fenster, auf welchem im zwei JPanels übereinander angeordnet sind. Auf dem oberen JPanel habe ich von links nach rechts ein Textfeld, eine Combobox und einen Button. Nun hätte ich gerne, dass nach Betätigen von TAB im Textfeld, der Focus aus diesem JPanel springt und folglich ins untere JPanel springt. Mit der Standard-Policy ist dies der Fall, nachdem ich auf dem Button die TAB-Taste drücke.
Java:
public class CustomFocusTraversalPolicy
extends FocusTraversalPolicy {
List<Component> order;
public CustomFocusTraversalPolicy(List<Component> order) {
this.order = new ArrayList<Component>(order.size());
this.order.addAll(order);
}
@Override
public Component getComponentAfter(Container focusCycleRoot,
Component aComponent) {
int idx = (order.indexOf(aComponent) + 1) % order.size();
return order.get(idx);
}
@Override
public Component getComponentBefore(Container focusCycleRoot,
Component aComponent) {
int idx = order.indexOf(aComponent) - 1;
if (idx < 0) {
idx = order.size() - 1;
}
return order.get(idx);
}
@Override
public Component getDefaultComponent(Container focusCycleRoot) {
return order.get(0);
}
@Override
public Component getLastComponent(Container focusCycleRoot) {
return order.get(order.size()-1);
}
@Override
public Component getFirstComponent(Container focusCycleRoot) {
return order.get(0);
}
}
Ich habe nun also diese Klasse implementiert und die folgende Liste erstellt {ComboBox, Button, Textfeld}, in der Hoffnung, dass nun nach dem Textfeld aus dem JPanel gesprungen wird und mit der TAB-Reihenfolge des JFrames weitergemacht wird. Leider tabbe ich aber nun zyklisch im Kreis, also ComboBox -> Button -> Textfeld -> ComboBox.
Ich hatte schon versucht, bei
Code:
getComponentAfter()
Weiß da jemand weiter?
Grüße,
Patrick