FocusTraversalPolicy ?

Status
Nicht offen für weitere Antworten.
M

Manuela

Gast
Hallo
ich habe auf einem Panel verschiedene JComponente, JTextfelder ,JComboboxen usw...

und ich habe mit dieser Art meinen Focus auf die einzelnen Componente gesetzt, jetzt kommt das Problem

http://www.java-forum.org/de/viewto...licy+getfocustraversal+final+jcomponent+order


ich starte mit einem Textfeld und wenn ich an der 7 stelle an eine JComboBox komme springt der Cursor wieder an
die erste stelle ??? warum er das macht habe ich keine Ahnung.
Code:
FocusTraversalPolicy policy = MyFocusTraversalPolicy.getFocusTraversal(new JComponent[]{textfield1,textfield2, textfield3,textfield4,textfield5
,textfield6,jComboBox1,textfield7,textfield8,textfield9,...}) 
setFocusTraversalPolicy(policy); 
setFocusCycleRoot(true);


Code:
public class MyFocusTraversalPolicy { 

   public static FocusTraversalPolicy getFocusTraversal(final JComponent order[]) 
     { 
       FocusTraversalPolicy policy = new FocusTraversalPolicy() 
       { 
         java.util.List list = java.util.Arrays.asList(order); 
         public java.awt.Component getFirstComponent(java.awt.Container 
                                                     focusCycleRoot) 
         { 
           return order[0]; 
         } 

         public java.awt.Component getLastComponent(java.awt.Container 
                                                    focusCycleRoot) 
         { 
           return order[order.length - 1]; 
         } 

         public java.awt.Component getComponentAfter(java.awt.Container 
                                                     focusCycleRoot, 
                                                     java.awt.Component aComponent) 
         { 
           int index = list.indexOf(aComponent); 
           return order[ (index + 1) % order.length]; 
         } 

         public java.awt.Component getComponentBefore(java.awt.Container 
             focusCycleRoot, 
             java.awt.Component aComponent) 
         { 
           int index = list.indexOf(aComponent); 
           return order[ (index - 1 + order.length) % order.length]; 
         } 

         public java.awt.Component getDefaultComponent(java.awt.Container 
             focusCycleRoot) 
         { 
           return order[0]; 
         } 

         public java.awt.Component getInitialComponent(java.awt.Window window) 
         { 
           return order[0]; 
         } 
       }; 
       return policy; 
     } 
}


Ich habe bei mehrern Panels das gleiche gemacht und dort funktioniert das ohne Probleme.

Also wo kann das problem sein.

Danke Manuela
 

André Uhres

Top Contributor
Manuela hat gesagt.:
..wenn ich an der 7 stelle an eine JComboBox komme springt der Cursor wieder an
die erste stelle ?..
Vielleicht weil textfield7 == textfield1 ist?
Wenn die JComboBox editable ist, dann versuch's mit:
(JComponent)jComboBox1.getEditor().getEditorComponent()
 
G

Gast

Gast
Versteh ich das richtig das ich damit den Focus über eine Reihe bestimmter Componenten in meiner Anwendung kreisen lassen kann?
 
M

Manuela

Gast
Hallo,
habe Fehler gefunden,

ich habe die Combobox setEditable(false) gesetzt und schon ging es wieder.

Gruß Manuela
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben