有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用tab键和swing将一个字段移动到另一个字段?

我正在创建一个扩展JPanel的类。我使用GridBagConstraints在面板中添加了几个文本区域和下拉列表。现在我想用键盘上的tab键将一个字段移动到另一个字段。我还想提到的是,以前tab键是扩展文本区域的

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

但我不知道如何使工作成为tab键?请帮忙


共 (4) 个答案

  1. # 2 楼答案

    在任何文本区域内按TAB键时,将创建制表符号。因此,您的代码setTabSize(0)没有修复任何问题-它只是将表格宽度设置为零

    若您只是在寻找焦点更改热键,则Ctrl+TAB将在任何Swing文本组件内工作,而不是使用简单的TAB,并将焦点切换到下一个可用和可聚焦的组件。Ctrl+Shift+TAB将焦点切换到上一个可用且可聚焦的组件

    如果您希望选项卡的操作方式与其他Swing组件中的相同,可以添加自定义选项卡操作:

    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. 将默认选项卡击键替换为输入映射中的第一个操作名称
    2. 将自定义操作添加到组件操作映射中
  2. # 3 楼答案

    使用以下示例:

    Vector vector=new Vector(3);
    vector.Add(textBox1);
    vector.Add(textBox2);
    vector.Add(textBox3);
    clsTabOrder newPolicy=new clsTabOrder(vector);
    setFocusTraversalPolicy(newPolicy);
    textBox1.requestFocus();
    
  3. # 4 楼答案

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

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

     this.jTextField11.requestFocusInWindow();