2012-09-26 22 views
1

我正在创建一个扩展为JPanel的类。有几个textareas和下拉列表,我在该面板中使用了GridBagConstraints。现在我想使用键盘的Tab键将一个字段移动到另一个字段。我还想提一下之前的标签键是扩展textareas。如何使用标签键使用swing将一个字段移动到另一个字段?

这就是为什么我写这行:restuarantLocation.setTabSize(0);现在它停止扩大。

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

+0

说明:是否要使用TAB键从一个组件移到另一个组件? – davidXYZ

+0

如果你想在“JTextArea”中“禁用”TAB键的默认行为,你可以看看[这篇文章](http://stackoverflow.com/questions/5042429/how-can-i-modify -the-behavior-of-the-tab-key-in-a-jtextarea) – MadProgrammer

回答

0

如果内置Tab键不起作用,您可能需要查看关于焦点遍历的Java教程。

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

+0

谢谢。但我需要解决方案。我几乎没有关于swing的想法。但仍然thnks.I正在通过链接。:) – user1568579

+2

@ user1568579 _I需要解决方案_我们需要一个更清晰的问题来展示非工作代码的具体示例。发布[SSCCE](http://sscce.org),您的帖子上的答案将会下雨。 –

+0

@ user1568579并在此评论[请阅读StackOverflow FQA](http://stackoverflow.com/faq) – mKorbel

4

当你按下TAB任何文本区域里面 - 它创造的制表符。所以你的代码setTabSize(0)不能解决任何问题 - 它只是将制表宽度设置为零。

如果您只是在寻找焦点更改热键 - Ctrl + Tab将在任何Swing文本组件中运行而不是简单的TAB,并将焦点切换到下一个可用和可聚焦组件。 Ctrl + Shift + TAB将焦点切换到先前可用和可聚焦的组件。

如果您想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. 更换默认选项卡KeyStroke首先在输入地图中输入动作名称
  2. 将您的自定义动作添加到组件动作地图中
+0

谢谢洛特。我可以使用jpanel而不是jframe吗? – user1568579

+0

@ user1568579添加文本区域的位置并不重要 –

0

使用此示例:

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

第一个代码行是:Vector vector = new Vector(3); –

+0

建议http://stackoverflow.com/help/formatting可能会帮助您制作更好的格式。 – CrazyCasta

相关问题