wood burning stoves 2.0*
The moose likes Swing / AWT / SWT and the fly likes JTabbedPane with Keyevents Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Spring in Action this week in the Spring forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "JTabbedPane with Keyevents " Watch "JTabbedPane with Keyevents " New topic
Author

JTabbedPane with Keyevents

Nina Milo
Greenhorn

Joined: Jul 29, 2008
Posts: 19
I have created a tabbedpane with 3 tabs (Tab1, Tab2, Tab3) . Mnemonic
(ALT-F) is assigned only to the Tab1.

If any of the component is selected inside the Tab2 or Tab3, it can
still traverse back to Tab1 on pressing key ALT-F.
But if any component is selected in the Tab1 itself, pressing ALT-F
will not take me back to Tab1. I have to somehow get the focus for
Tab1 too.


Here is my code. Just copy-Paste to run it.
Please provide assistance.

Thank you.


Note: I don�t want to set Mnemonic to each Tab. Only one Mnemonic
should do my work.


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


import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;


public class myClass {


public static void main(String args[]) throws Exception {


JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


JTabbedPane tabbedPane = new JTabbedPane();


JButton button1= new JButton("Button1");
JButton button2= new JButton("Button2");
JPanel panel1 = new JPanel();
panel1.add(button1);
panel1.add(button2);


tabbedPane.addTab("Tab1", null, panel1, null);


JLabel label = new JLabel("Check ");
JCheckBox cbox = new JCheckBox("check me");
JPanel panel = new JPanel();
panel.add(label, null);
panel.add(cbox);


tabbedPane.addTab("Tab2", null, panel, null);


JButton button3 = new JButton("Button");
tabbedPane.addTab("Tab3", null, button3, null);


int mnemonic = KeyEvent.VK_F;


tabbedPane.setMnemonicAt(tabbedPane.getSelectedIndex(), mnemonic);


ChangeListener changeListener = new ChangeListener() {
public void stateChanged(ChangeEvent changeEvent) {


JTabbedPane tab =
(JTabbedPane)changeEvent.getSource();
int index = tab.getSelectedIndex();


if(index==0)
tab.requestFocus();


}
};
tabbedPane.addChangeListener(changeListener);


frame.add(tabbedPane, BorderLayout.CENTER);
frame.setSize(400, 150);
frame.setVisible(true);


}
}
Michael Dunn
Ranch Hand

Joined: Jun 09, 2003
Posts: 4632
> But if any component is selected in the Tab1 itself, pressing ALT-F
> will not take me back to Tab1. I have to somehow get the focus for Tab1 too.

the problem is the focus request is in a changeListener, and as the selectedIndex
does not change, the request is not called.

KeyBindings might be a better option for you.

Nina Milo
Greenhorn

Joined: Jul 29, 2008
Posts: 19
Thanks Michael. As you said keybindings is better option to handle these events. The sample code looks perfect what i was looking for.

Thanks
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: JTabbedPane with Keyevents