Home / Programmazione / Java / Cambiare tab con Ctrl-TAB in un JTabbedPane
Mattepuffo

Cambiare tab con Ctrl-TAB in un JTabbedPane

Cambiare tab con Ctrl-TAB in un JTabbedPane

JTabbedPane è il componente SWING che si occupa di dividere l'interfaccia in tab.

Una delle cose che ormai tutti i programmi fanno, e quindi alla quale siamo abituati, è cambiare tab usando la combinazione Ctrl+TAB.

Di default in Java il comportamento non è questo (o forse lo è solo in Windows ma non ricordo bene).

Possiamo però modificarlo noi.

Nel nostro JFrame, nel costruttore:

TabKeys.setupTabTraversalKeys(jTabbedPane1);

TabKeys è una classe creata apposta che adesso vedremo.

E' proprio questa classe che si occupa di tutto:

public class TabKeys {

    public static void setupTabTraversalKeys(JTabbedPane tabbedPane) {
        KeyStroke ctrlTab = KeyStroke.getKeyStroke("ctrl TAB");
        KeyStroke ctrlShiftTab = KeyStroke.getKeyStroke("ctrl shift TAB");
        // RIMUOVIAMO LO STANDARD CTR-TAB
        Set forwardKeys = new HashSet<>(tabbedPane.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
        forwardKeys.remove(ctrlTab);
        tabbedPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);
        // RIMUOVIAMO LO STANDARD CTR-SHIFT-TAB
        Set backwardKeys = new HashSet<>(tabbedPane.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
        backwardKeys.remove(ctrlShiftTab);
       tabbedPane.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardKeys);
        // IMPOSTIAMO COMBINAZIONI TASTI
        InputMap inputMap = tabbedPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        inputMap.put(ctrlTab, "navigateNext");
        inputMap.put(ctrlShiftTab, "navigatePrevious");
    }
}

Un unico metodo statico.

Detta in maniera veloce, prima ci occupiamo di fare un pò di pulizia dai comportamenti standard del sistema operativo.

Nelle ultime tre righe, invece, impostiamo il comportamento che vogliamo.

Come vedete impostiamo una combinazione per andare al prossimo tab, e una per andare a quello precedente.

Enjoy!