我正在创建一个扩展的类JPanel
。我在该面板中添加了几个文本区域和下拉菜单GridBagConstraints
。现在我想使用键盘的 tab 键将一个字段移动到另一个字段。我还想提一下,以前的 tab 键正在扩展文本区域。
这就是我写这行的原因:restuarantLocation.setTabSize(0);
现在它停止了扩展。
但我不知道如何使制表键工作?请帮忙。
我正在创建一个扩展的类JPanel
。我在该面板中添加了几个文本区域和下拉菜单GridBagConstraints
。现在我想使用键盘的 tab 键将一个字段移动到另一个字段。我还想提一下,以前的 tab 键正在扩展文本区域。
这就是我写这行的原因:restuarantLocation.setTabSize(0);
现在它停止了扩展。
但我不知道如何使制表键工作?请帮忙。
当您在任何文本区域内按 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 );
}
} );
}
请注意,您必须:
使用这个例子:
Vector vector=new Vector(3);
vector.Add(textBox1);
vector.Add(textBox2);
vector.Add(textBox3);
clsTabOrder newPolicy=new clsTabOrder(vector);
setFocusTraversalPolicy(newPolicy);
textBox1.requestFocus();
如果内置的制表符不起作用,您可能需要查看有关焦点遍历的 Java 教程。
http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html
jTextField1.setNextFocusableComponent(jTextField2);
jTextField2.setNextFocusableComponent(jTextField3);
jTextField3.setNextFocusableComponent(jTextField4);
jTextField4.setNextFocusableComponent(jTextField5);
当你不显示 jframe 点击自动点击 jtextfild
this.jTextField11.requestFocusInWindow();