添加TAB键java swing键绑定——正确的名称是什么?
但它不是印刷品。这与我用于所有其他键的设置相同,但我无法使tab键工作。我试过了添加TAB键java swing键绑定——正确的名称是什么?,java,swing,key-bindings,Java,Swing,Key Bindings,但它不是印刷品。这与我用于所有其他键的设置相同,但我无法使tab键工作。我试过了“TAB”,“TAB”,和“TAB” 它的正确名称是什么?或者有什么特别的吗?您可能想要: Action tab = new AbstractAction() { public void actionPerformed(ActionEvent e) { System.err.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
“TAB”
,“TAB”
,和“TAB”
它的正确名称是什么?或者有什么特别的吗?您可能想要:
Action tab = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.err.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
}
};
Game.panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("Tab"), "tab");
Game.panel.getActionMap().put("tab", tab);
对于,按可输出
根据您的用例,还有一些更可取的方法。请参阅
KeyEvent
中的文档,了解为什么您应该选择其中一个或另一个。由于制表符通常由焦点子系统处理,所以我很惊讶击键对您有效
这对我不起作用。我在Windows 7上使用JDK8:
KeyStroke.getKeyStroke('\t');
上面的代码对你有用吗
只有“1”和“a”适合我。Tab键对我不起作用
如果没有,那么你能发布一个简单的SSCCE来展示你是如何使用它的吗
编辑:
上述代码将与以下任一项一起使用:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TabSSCCE extends JPanel
{
public TabSSCCE()
{
Action tab = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("key typed");
}
};
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('1'), "typed");
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('a'), "typed");
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke('\t'), "typed");
getActionMap().put("typed", tab);
}
private static void createAndShowGUI()
{
JFrame frame = new JFrame("TabSSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TabSSCCE());
frame.setLocationByPlatform( true );
frame.setSize(100, 100);
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater( () -> createAndShowGUI() );
/*
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
*/
}
}
或者,您可以禁用面板的焦点遍历键:
frame.setVisible( true );
frame.setFocusTraversalKeysEnabled(false);
您将如何合并已发布的“\t”?@MitchWeaver它应该与覆盖的任何其他密钥-注册一个
KeyListener
。总的来说,发布新问题比在评论中询问后续问题要好。我的糟糕之处在于,我的想法正好相反,发布另一个问题是不礼貌的。不管怎样,有没有一种方法比keylister
更能坚持使用keybindings
方法呢?关键听众的速度较慢,而且可以表现得很时髦,这不是游戏的最佳选择。@MitchWeaver我绝对建议你在另一个问题中问这个问题(更详细),我不确定你指的是什么。我只是在尝试。是的,它更易于使用,并且确实解决了我发布的问题:getKeyStroke(KeyEvent.VK_选项卡,KeyEvent.KEY_发布)
是的,这就是我所有按键的方式,与我的问题完全一样。我使用的是linux,8,但我的游戏在win/mac上也运行良好。老实说,我不确定你的问题是什么。@MitchWeaver,我应该澄清,“1”和“a”对我有用,但“\t”不起作用。我想我的意思是,您不应该试图处理Tab键,因为焦点遍历系统会截取这个键。该代码在Windows上不工作,因此您没有独立于平台的解决方案。啊,我明白了,是的,我没有测试该选项卡,因为我刚刚实现了它。getKeyStroke(KeyEvent.VK\u选项卡,KeyEvent.KEY\u按下)
比“\t”
更适合你吗?@MitchWeaver,不,这种方法对我也不适用。我想找到了解决方案!将其放在声明组件的位置:setFocusTraversalKeysEnabled(false)
个人更喜欢KeyStroke.getKeyStroke(KeyEvent.VK_选项卡,0)
我自己
public TabSSCCE()
{
setFocusable(true);
setFocusTraversalKeysEnabled(false);
...
}