Questo mi risulta che funziona sia con il click del mouse, sia da tastiera usando i mnemonic o usando le frecce quando la linguetta del tab ha il focus.
codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class TestFrame extends JFrame
{
private JTabbedPane tabbedPane;
private JTextField textField1a;
private JTextField textField1b;
private JTextField textField2a;
private JTextField textField2b;
private JTextField textField3a;
private JTextField textField3b;
public TestFrame ()
{
super ("Test Frame");
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
setSize (300, 300);
tabbedPane = new JTabbedPane ();
JPanel panel1 = new JPanel (new FlowLayout ());
textField1a = new JTextField (10);
panel1.add (textField1a);
textField1b = new JTextField (10);
panel1.add (textField1b);
JPanel panel2 = new JPanel (new FlowLayout ());
textField2a = new JTextField (10);
panel2.add (textField2a);
textField2b = new JTextField (10);
panel2.add (textField2b);
JPanel panel3 = new JPanel (new FlowLayout ());
textField3a = new JTextField (10);
panel3.add (textField3a);
textField3b = new JTextField (10);
panel3.add (textField3b);
tabbedPane.addTab ("Uno", panel1);
tabbedPane.setMnemonicAt (0, KeyEvent.VK_U);
tabbedPane.addTab ("Due", panel2);
tabbedPane.setMnemonicAt (1, KeyEvent.VK_D);
tabbedPane.addTab ("Tre", panel3);
tabbedPane.setMnemonicAt (2, KeyEvent.VK_T);
add (tabbedPane);
tabbedPane.addChangeListener (new ChangeListener ()
{
public void stateChanged (ChangeEvent e)
{
switch (tabbedPane.getSelectedIndex ())
{
case 0: textField1b.requestFocusInWindow (); break;
case 1: textField2b.requestFocusInWindow (); break;
case 2: textField3b.requestFocusInWindow (); break;
}
}
});
}
public static void main (String[] args)
{
SwingUtilities.invokeLater (new Runnable ()
{
public void run ()
{
TestFrame f = new TestFrame ();
f.setVisible (true);
}
});
}
}