Fokus Reihenfolge ändern

Status
Nicht offen für weitere Antworten.

Niki

Top Contributor
Hallo!

Unter 1.3.x habe ich die Methode setNextFocusableComponent bei meinen gui-Komponenten verwendet. Diese Methode ist jedoch unter 1.4.x deprecated. Nun möchte ich den Code auf 1.4.x anpassen, habe jedoch bis auf den nicht sprechenden hinweis von der sun api documentation (use FocusTraversalPolicy) nichts gefunden. Kann mir jemand bitte helfen, wie ich die Focusreihenfolge unter 1.4.x ändern kann?

Danke schon im Voraus!
 

thE_29

Top Contributor
Ich sollte dazu mal was bei den FAQs reinschreiben ;>

Funktion mit static usw abwandeln wie du sie brauchst:
Code:
  /****************************************************************************
   * Gibt die Reihenfolge der in order[] gespeicherten Componenten als FocusTraversalPolicy Objekt zurück
   * @param order  sind die Componenten in richtiger Reihenfolge und notfalls muss eine Typkonvertierung
   * mittels (JComponent) durchgeführt werden
   * @return  das Objekt mit dem man mit setFocusTraversalPolicy(FocsTraersalPolicy) und aktivieren mit
   * setFocusCycleRoot(true)
   ***************************************************************************/
  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;
  }


Aufruf:

Code:
    /*Setzt die richtige Tabulatorenreihenfolge */
    FocusTraversalPolicy policy = getFocusTraversal(
        new JComponent[]
        {jbAE, jbBuAus, m_tab});

    setFocusTraversalPolicy(policy);
    setFocusCycleRoot(true);
 

Niki

Top Contributor
Danke für so eine rasche Antwort. Das heisst ich müsste für die Methode setNextFocusableComponent jedesmal ein eigenes Policy Objekt erzeugen. Find ich nicht sehr angenehm.

Ich hab nur folgendes Problem. Ich hab in meinem Panel einige Komponenten, und möchte nur von wenigen die Reihenfolge ändern bzw. wird die Reihenfolge zur Laufzeit geändert wenn bestimmte ItemEvents gefeuert werden. Ich find generell das neue FocusHandling vom 1.4.x etwas verwirrend. Vor allem habe ich keine besonders gute Doku gefunden.
 

thE_29

Top Contributor
na, nix setNextFocusable

du hast deine Funktion (die getFocus...)

und dann sagst du den Aufruf

Code:
FocusTraversalPolicy policy = getFocusTraversal(
        new JComponent[]
        {JTextField1, JTextField3,JTextField2,....uswuswusw}); 
 setFocusTraversalPolicy(policy);
    setFocusCycleRoot(true);

so geht das, du sagst das 1mal net für jedes ;)
 

Niki

Top Contributor
Alles klar, das heisst ich setzte über die Policy einfach das Focusverhalten einmalig. Setze ich dann meinem Container die Policy? Dann hab ich eben das Problem, dass ich für alle Componenten die Reihenfolge festlegen will, wobei es nur 3 Komponenten von 10 betrifft. Und während der Laufzeit ändert sich eben auch die Reihenfolge bei bestimmten Ereignissen. Mit der setNextFocusable Methode war ich da wesentlich flexibler.
 

thE_29

Top Contributor
Jo, das kann schon sein und das nextfocusable geht zz auch noch, aber sun hat sich halt das FocusTraversal einfallen lassen...

Du könntest aber in einer 1 Funktion alle verschiedenen arten generieren lassen und dann nachher zuweisen (mehrere policies)
 

Niki

Top Contributor
Ja, sowas hab ich eh im Sinn gehabt. Werd mir eine FocusPolicyFactory schreiben. Factories sind immer gut :)
 
G

Guest

Gast
hmmmm, kann man nicht auch einfach den container setzen und der fokus springt in der reihenfolge in die die objekte aufs panel geaddet werden?

Code:
// Fokus Cycle einschalten
jContentPaneStart.setFocusCycleRoot(true);
// Den Container erzeugen
ContainerOrderFocusTraversalPolicy policy = new ContainerOrderFocusTraversalPolicy();
// Das Pane für den Container aufsetzen
jContentPaneStart.setFocusTraversalPolicy(policy);	
// Und nun einfach die Komponenten auf das Pane hauen
jContentPaneStart.add(getJTextField(), null);
jContentPaneStart.add(getJTextField3(), null);
jContentPaneStart.add(getJTextField1(), null);

das klappt doch auch? zumindest bei mir, allerdings schmeisst er mir ne "to complicated" meldung raus.
bitte schreibt mal eure meinung dazu! ^^
 

thE_29

Top Contributor
Wenn man die ganze policy net setzt, dann hüpft er es horziontal /vertikal durch!

Also von oben links, nach unten rechts, gehen die Komponenten zeilenweise durch...

Und nicht wie man es draufadded!!
 
G

Gast

Gast
hm, hab ma grad inner beispielanwendung die adding-reihenfolge geändert und dann übersprint auch tatsächlich die umliegenden textfelder und setzt den fokus aufs textfeld ganz unten in der ecke. kann das sein?
 
G

Gast

Gast
hm ok wir machens folgendermaßen:

ich bin grad auf der arbeit, aber wenn ich zu hause bin packs ichs ma aufn ftp und dann kannst ja ma schauen.

ich hab das nämlich ausm sun java forum aufgeschnappt:

Re: How do I use FocusTraversalPolicy?
1. Register your Container as FocusCycleRoot before add the components to it;

jPanel1.setFocusCycleRoot(true);

2. Become the Container FocusTraversalPolicy;

FocusTraversalPolicy focusPolicy = jPanel1.getFocusTraversalPolicy();

3. Add components to Container.

...
jPanel1.add(textField);
...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
H Swing Wie Fokus von JTextField entfernen? AWT, Swing, JavaFX & SWT 9
CptK Fokus auf geöffnetes Zweit-Fenster setzen und Eingaben außerhalb blocken AWT, Swing, JavaFX & SWT 2
Neumi5694 Swing Card-Layout, Fokus AWT, Swing, JavaFX & SWT 2
M JavaFX Absoluter Fokus während drag Event AWT, Swing, JavaFX & SWT 10
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
C SWT MenuBar & MenuItems Fokus wenn F10 unterdrücken/entfernen AWT, Swing, JavaFX & SWT 9
1 Swing Bestimme ob ein Subelement eines panel den Fokus verloren hat AWT, Swing, JavaFX & SWT 2
B Swing Fokus auf JPanel setzen AWT, Swing, JavaFX & SWT 2
J Swing Fokus JInternalFrame fehlerhaft AWT, Swing, JavaFX & SWT 4
B Fokus markierung entfernen AWT, Swing, JavaFX & SWT 2
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
A Vordergrund und Fokus setzten oder Modales Einabefeld AWT, Swing, JavaFX & SWT 28
G SWT Fokus auf MsgBox setzen AWT, Swing, JavaFX & SWT 3
M Fokus für KeyListener AWT, Swing, JavaFX & SWT 9
A Fokus wieder in ein JTextField setzen AWT, Swing, JavaFX & SWT 4
N Filternde Combobox in JTable verliert Fokus nach erster Eingabe AWT, Swing, JavaFX & SWT 2
J Swing Wie Fokus richtig setzen? AWT, Swing, JavaFX & SWT 7
T Swing Fokus AWT, Swing, JavaFX & SWT 2
I Swing Wie bekomme ich den Fokus für einen JPanel AWT, Swing, JavaFX & SWT 5
H Swing Problem mit FocusCycleRoot, der FocusTraversalPolicy und dem Fokus AWT, Swing, JavaFX & SWT 2
G Problem beim setzen des Fokus AWT, Swing, JavaFX & SWT 4
E Swing Mit rechter Maustaste Fokus in JList setzen?! AWT, Swing, JavaFX & SWT 3
F Rechte Maustaste auf TreeNode soll den Fokus auf diese setzen AWT, Swing, JavaFX & SWT 6
agent47 Swing auf Schnelltaste ohne Fokus hören AWT, Swing, JavaFX & SWT 2
M JSpinner als TableCellEditor; buttons nur bei fokus sichtbar AWT, Swing, JavaFX & SWT 14
Z Fokus auf Eingabefeld bei showMessageDialog setzen AWT, Swing, JavaFX & SWT 3
N Herkunft des Fokus erkennbar (via Klick oder Tab-Steuerung)? AWT, Swing, JavaFX & SWT 4
F Panel kann nicht Fokus erhalten AWT, Swing, JavaFX & SWT 2
N Textfeld füllen sobald es den Fokus verliert AWT, Swing, JavaFX & SWT 2
D JTable, Model, Fokus AWT, Swing, JavaFX & SWT 3
multiholle AWT Hotkey ohne Fokus AWT, Swing, JavaFX & SWT 6
W JTextArea/TextArea kriegt keinen Fokus AWT, Swing, JavaFX & SWT 6
T Fokus auf CB in Table mit beliebiger Taste AWT, Swing, JavaFX & SWT 12
G JOptionPane.showInputDialog(): Texteingabe und Fokus AWT, Swing, JavaFX & SWT 3
V Kein Fokus für Key Bindings auf JPanel bzw JApplet AWT, Swing, JavaFX & SWT 2
R Fokus von GUI-Elementen AWT, Swing, JavaFX & SWT 3
F Herausfinden, auf welchem Objekt der Fokus liegt AWT, Swing, JavaFX & SWT 2
V JTable verliert Fokus, wie offene Zelle schliessen? AWT, Swing, JavaFX & SWT 5
S Eventhandling obwohl Fenster nicht im Fokus AWT, Swing, JavaFX & SWT 5
GilbertGrape bei "Enter" Funktion ausführen, egal wo der Fokus AWT, Swing, JavaFX & SWT 2
A Fokus in ein Textfeld setzen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A ComboBox soll reagieren ohne fokus AWT, Swing, JavaFX & SWT 7
C Probleme einem JPanel den Fokus zuzuweisen AWT, Swing, JavaFX & SWT 2
A Fokus und JTextField AWT, Swing, JavaFX & SWT 35
T JList mit eigenem TransferHandler: Fokus(?)-Probleme AWT, Swing, JavaFX & SWT 4
D JButton mit Fokus soll auf ENTER reagieren AWT, Swing, JavaFX & SWT 3
M Frame erhält ungewollt den Fokus AWT, Swing, JavaFX & SWT 10
V JTable Handling Fokus on Keystroke und Maus Doubleclick AWT, Swing, JavaFX & SWT 9
S JTextArea mit Scrollbar,append Text mit Fokus? AWT, Swing, JavaFX & SWT 5
G Event, wenn JTextField Fokus verliert? AWT, Swing, JavaFX & SWT 2
C Der hartnäckige Fokus AWT, Swing, JavaFX & SWT 3
G Keylistener/Fokus Problem AWT, Swing, JavaFX & SWT 3
B Fokus Problem unter Linux AWT, Swing, JavaFX & SWT 7
J JFrame und Fokus AWT, Swing, JavaFX & SWT 4
M Fokus auf ein JTextfield in einem JDialog setzen AWT, Swing, JavaFX & SWT 6
I fokus AWT, Swing, JavaFX & SWT 4
H JavaFX Timeline KeyFrame Reihenfolge AWT, Swing, JavaFX & SWT 6
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
K Swing Reihenfolge bei ActionListenern AWT, Swing, JavaFX & SWT 1
J Reihenfolge der Punkte in Vielecken AWT, Swing, JavaFX & SWT 3
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
T Java-Anwendung arbeitet Programm in seltsamer Reihenfolge ab AWT, Swing, JavaFX & SWT 3
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
lumo LayoutManager SWT GridLayout - Reihenfolge ändern AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
C Swing Text eines JButton mit String definieren? Reihenfolge? AWT, Swing, JavaFX & SWT 6
D Swing JOptionPane + FileChooser .. Reihenfolge wichtig!? AWT, Swing, JavaFX & SWT 7
A Reihenfolge von ActionListener und InputVerifier AWT, Swing, JavaFX & SWT 4
P JList: Reihenfolge der Elemente per Drag'n'Drop ändern. AWT, Swing, JavaFX & SWT 9
T Tab Reihenfolge bei JTextFeldern ändern AWT, Swing, JavaFX & SWT 4
H Reihenfolge z.B. KeyPressed in Child/Parent AWT, Swing, JavaFX & SWT 11
G Reihenfolge von Events AWT, Swing, JavaFX & SWT 4
S Labels und Button übereinander --> Reihenfolge? AWT, Swing, JavaFX & SWT 4
M Tab-Reihenfolge aber mit SWT AWT, Swing, JavaFX & SWT 1
K Tab-Reihenfolge AWT, Swing, JavaFX & SWT 7
T "globaler" keylistener/tab-reihenfolge/insertcurso AWT, Swing, JavaFX & SWT 5
B JTree - Reihenfolge der Nodes verändern AWT, Swing, JavaFX & SWT 3
bernd Reihenfolge beim springen mit Tab-Taste ändern! AWT, Swing, JavaFX & SWT 4
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
_user_q ChoiceBox Elemente: Sprache ändern AWT, Swing, JavaFX & SWT 7
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
B Deckraft ändern AWT, Swing, JavaFX & SWT 1
Davee JavaFX ListView = null wenn ich sie in Laufzeit ändern will! AWT, Swing, JavaFX & SWT 16
missy72 JavaFX RowFactory Schriftfarbe ändern AWT, Swing, JavaFX & SWT 6
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
Hatsi09 GUI Input Farbe ändern AWT, Swing, JavaFX & SWT 0
W JavaFX CSS ändern wirft NPE AWT, Swing, JavaFX & SWT 8
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben