2012-02-28 10 views
9

Chcę wiedzieć, jak dostosować kolejność kart w interfejsie Swing. Znalazłem przykład i pokazało, że ta metoda powinna załatwić sprawę, ale wygląda na to, że jest przestarzała i nie działa.Jak ustawić kolejność kart w Swing Java?

getCombox("cmbFrom").setNextFocusableComponent(getCombox("cmbTo")); 

Uwaga: - Poniższa metoda zwraca obiekt Combox z nazwą argumentu. Jeśli ktoś wie, jak to zrobić z Netbeans IDE, byłoby świetnie. Znalazłem sposób, aby to zrobić w Eclipse WindowBuilder, ale nie w Netbeans IDE. Dziękuję Ci.

getCombox(String s) 

Odpowiedz

14

Możesz użyć setFocusTraversalPolicy w swoim kontenerze.

FocusTraversalPolicy Klasa jest abstrakcyjna i trzeba zaimplementować kilka metod, które zwrócą kolejność fokusowania kontenera. Będzie działać z Tab i Shift + Tab.

+1

Najlepiej jest łącze do najnowszej wersji JavaDocs. Zmieniłem twoją odpowiedź na J2SE 7. Wskazówki na temat uzyskiwania linku do najnowszych dokumentów znajdują się w [punkt 2 zalet] (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7090875) . –

+3

+1 dla FTP, ale lepiej nie zaczynaj od FocusTraversalPolicy, jest za dużo, co może pójść nie tak. Lepiej zacznij od dowolnej konkretnej implementacji (fi SortingFocusTraversalPolicy) i zmień ją w razie potrzeby (fi wtyczkę niestandardowego komparatora) – kleopatra

+0

fyi, wystarczy sprawdzić samouczek http://docs.oracle.com/javase/tutorial/uiswing/misc/ focus.html # customFocusTraversal - ten rozdział jest wciąż tak zły, jak był od początku. Aby zobaczyć niewłaściwe zachowanie zbyt naiwnej implementacji, zastąp f.i. textField tf4 z edytowalnym comboBox ... – kleopatra

3

jeśli używasz netbeans wybierz pierwszy składnik, który ma być pierwszym skupionym elementem, a we właściwościach upewnij się, że zaznaczono FocusCycleRoot. aw nextFocusableComponent wybrać następny element, który chcesz uzyskać ostrość po naciśnięciu zakładki i iść dalej w ten sam sposób do innego składnika

Uwaga: nie sprawdzić focusCycleRooot dla drugiego składnika