Avatar billede windcape Praktikant
26. november 2008 - 23:17 Der er 2 kommentarer og
1 løsning

Keybinding JTabbedPane

Hey

Hvordan kan jeg binde Ctrl+Tab og Ctrl+Shift+Tab til at tabbe frem&tilbage i et JTabbedPane?

SUN har jo været så ærkegeniale at diable enhver mulighed for at lave en keylistener til tab knappen.
Avatar billede arne_v Ekspert
27. november 2008 - 22:59 #1
Det kan sikkert gøres på mange måder, men lidt google fumleri ledte mig til følgende:

package november;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;

public class TabPanFun extends JFrame implements KeyListener {
    private static final int NOTABS = 5;
    private JTabbedPane tabs;
    private int curtab = 0;
    public TabPanFun() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Tabbing demo");
        setLayout(new BorderLayout());
        tabs = new JTabbedPane();
        JPanel[] tab = new JPanel[NOTABS];;
        for(int i = 0; i < NOTABS; i++) {
            tab[i] = new JPanel();
            tab[i].setLayout(new BorderLayout());
            JLabel lbl = new JLabel();
            lbl.setFont(new Font(Font.SERIF, Font.PLAIN, 72));
            lbl.setText("I am tab #" + (i + 1));
            tab[i].add(lbl, BorderLayout.CENTER);
            tabs.addTab("tab" + (i + 1), tab[i]);
        }
        tabs.setFocusTraversalKeysEnabled(false);
        tabs.addKeyListener(this);
        getContentPane().add(tabs, BorderLayout.CENTER);
        setSize(600, 400);
    }
    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getModifiers() == KeyEvent.CTRL_MASK
          && e.getKeyCode() == KeyEvent.VK_TAB) {
            curtab = (curtab + 1) % NOTABS;
            tabs.setSelectedIndex(curtab);
        } else if(e.getModifiers() == (KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK)
                  && e.getKeyCode() == KeyEvent.VK_TAB) {
            curtab = (curtab - 1 + NOTABS) % 5;
            tabs.setSelectedIndex(curtab);
        }
    }
    @Override
    public void keyReleased(KeyEvent e) {
    }
    @Override
    public void keyTyped(KeyEvent e) {
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new TabPanFun();
                f.setVisible(true);
            }
        });
    }
}
Avatar billede windcape Praktikant
05. december 2009 - 17:48 #2
Læg et svar så vi kan få den markeret lukket.
Avatar billede arne_v Ekspert
05. december 2009 - 21:14 #3
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester