Tab w oknie?

0

Mam pytanie, zapisałem program na swing w którym praca odbywa się w oknach. W Oknie jest kilka JTextArea. Praca jest utrudniona bo nie zrobiłem 'przeskakiwania klawiszem Tab na kolejne ople. Jak można to zrobic w Java. Oczywiście wiem jak ustawić akcje klawiszy. Nie potrafię tylko ustawic przeskakiwania na kolejne komponenty typu np JText Area tak abym po naciśnięciu tab Kursor przeskakiwał do następnego abym mógł je wypełnic i klawiszem Tab przejśc do następnego?

Prosze o pomoc w problemie ;)

0

O co Ci chodzi? O samo przeskakiwanie czy o kolejność skakania? Jeżeli chodzi o samo skakanie, to nic nie musisz robić.

Cofam, nie zwróciłem uwagi, że pytasz o JTextArea a nie o JTextField.

0

Tworząc kolejne JTextArea Rozszerz je o obsługę przeskakiwania. Sama obsługa powinna działać w taki sposób:

  1. naciskasz tab
  2. w klasie TabableJTextArea trzymasz sobie prywatne pole, które jest odnośnikiem do kolejnego pola, które należy uaktywnić po naciśnięciu Tab.

Względnie jeżeli masz źródła Javy, to popatrz na to:
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Container.html#setFocusTraversalPolicy%28java.awt.FocusTraversalPolicy%29

0

Przeczytałem, ale coś mi nie wychodzi ; Możesz podesłać jakiś przykład?

0
   /**
     * Włacza przechodzenie focusa klawiszem tab.
     * 
     * @param c komponent
     */
    public void setUpTraversalPolicy(final JComponent c) {
        // ustawiam przechodzenie klawiszem tab do przodu
        final Set<KeyStroke> forewardStrokes = new HashSet<KeyStroke>(
                Arrays.asList(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)));
        c.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, 
                forewardStrokes);
        // ustawiam przechodzenie klawiszem shift+tab do tyłu
        final Set<KeyStroke> backwardStrokes = new HashSet<KeyStroke>(
                Arrays.asList(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 
                        KeyEvent.SHIFT_DOWN_MASK)));
        c.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, 
                backwardStrokes);
    }
0

A jak to wywołać?

0
// tworze pole tekstowe
JTextArea area = new JTextArea();
// ustawiam zmiane focusa na przcisk TAB
setUpTraversalPolicy(area);
// done :)
0

Super dzięki nie myślałem że takie to prost ;)

0

To wcale nie jest takie proste. Wymaga trochę ślęczenia nad dokumentacją.

0

Trochę stary temat, ale...

O co Ci chodzi? O samo przeskakiwanie czy o kolejność skakania?

Ja bym się chętnie dowiedział jak ustawić kolejność "skakania".

0

Tutorial Suna prawdę Ci powie. W skrócie chodzi o to, że ustawienie kolejności skakania tabem przestało być cacy i od pewnego czasu jest be.
Swing sam ustawia kolejność komponentów na zasadzie początek od lewego górnego rogu, a koniec na prawym dolnym (patrz klasa LayoutFocusTraversalPolicy). Nie ma też znaczenia kolejność umieszczenia obiektów komponentów na formatce, liczy się tylko ich bieżąca pozycja. Jednak ponieważ większość layout managerów jakoś rozmieszcza komponenty wg kolejności ich dodawania, to w sumie wychodzi na to samo.
Tu masz przykład jak tego używać:
http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html#customFocusTraversal

1 użytkowników online, w tym zalogowanych: 0, gości: 1