如何使用摆动键使用摆动将一个字段移动到另一个字段?

时间:2012-09-26 12:27:14

标签: java swing jpanel jcomponent gridbaglayout

我正在创建一个扩展JPanel的类。我使用GridBagConstraints在该面板中添加了几个textareas和dropdown。现在我想使用键盘的tab键将一个字段移动到另一个字段。我还想提一下,之前tab键正在扩展textareas。

这就是我写这一行的原因:restuarantLocation.setTabSize(0);现在它停止了扩展。

但我不知道如何才能使tab键工作?请帮忙。

4 个答案:

答案 0 :(得分:4)

当您在任何文本区域内按TAB时 - 它会创建制表符号。因此,您的代码setTabSize(0)无法解决任何问题 - 它只是将制表宽度设置为零。

如果您只是寻找焦点更改热键 - Ctrl + TAB将在任何Swing文本组件中使用简单的TAB,并将焦点切换到下一个可用且可聚焦的组件。 Ctrl + Shift + TAB会将焦点切换到上一个可用且可聚焦的组件。

如果您希望TAB以与其他Swing组件相同的方式运行 - 您可以添加自定义TAB操作:

public static void main ( String[] args )
{
    SwingUtilities.invokeLater ( new Runnable ()
    {
        public void run ()
        {
            JFrame frame = new JFrame ();

            frame.setLayout ( new GridLayout ( 1, 2 ) );

            AbstractAction transferFocus = new AbstractAction ()
            {
                public void actionPerformed ( ActionEvent e )
                {
                    ( ( Component ) e.getSource () ).transferFocus ();
                }
            };

            JTextArea textArea1 = new JTextArea ();
            textArea1.getInputMap ().put ( KeyStroke.getKeyStroke ( "TAB" ), "transferFocus" );
            textArea1.getActionMap ().put ( "transferFocus", transferFocus );
            frame.add ( new JScrollPane ( textArea1 ) );

            JTextArea textArea2 = new JTextArea ();
            textArea2.getInputMap ().put ( KeyStroke.getKeyStroke ( "TAB" ), "transferFocus" );
            textArea2.getActionMap ().put ( "transferFocus", transferFocus );
            frame.add ( new JScrollPane ( textArea2 ) );

            frame.setSize ( 500, 200 );
            frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
            frame.setLocationRelativeTo ( null );
            frame.setVisible ( true );
        }
    } );
}

请注意,您必须:

  1. 首先在输入地图中将您的操作名称替换为默认选项卡KeyStroke
  2. 将自定义操作添加到组件操作映射

答案 1 :(得分:0)

如果内置选项卡不起作用,您可能需要查看焦点遍历的Java教程。

http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html

答案 2 :(得分:0)

使用此示例:

Vector vector=new Vector(3);
vector.Add(textBox1);
vector.Add(textBox2);
vector.Add(textBox3);
clsTabOrder newPolicy=new clsTabOrder(vector);
setFocusTraversalPolicy(newPolicy);
textBox1.requestFocus();

答案 3 :(得分:0)

 jTextField1.setNextFocusableComponent(jTextField2);
    jTextField2.setNextFocusableComponent(jTextField3);
    jTextField3.setNextFocusableComponent(jTextField4);
    jTextField4.setNextFocusableComponent(jTextField5);

当您不显示jframe时,单击自动单击jtextfild

 this.jTextField11.requestFocusInWindow();