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.
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);
}
});
}
}