添加 TAB 键 java swing keybindings --- 正确的名称是什么?
Adding TAB key java swing keybindings --- What is the correct name?
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);
但是它没有打印。这与我用于所有其他键的设置相同,但我无法使 Tab 键工作。我试过 "TAB"
、"Tab"
和 "tab"
。
它的正确名称是什么?或者有什么特别之处?
你可能想要:
KeyStroke.getKeyStroke('\t');
\t
is the escape sequence for the TAB character (0x09), which is output by pressing tab on your keyboard.
还有 KeyEvent.VK_TAB
,根据您的用例,这可能更可取。请参阅 KeyEvent
中的文档,详细了解为什么您应该选择其中之一。
我很惊讶 KeyStroke 对你有用,因为 Tab 字符通常由焦点子系统处理。
它对我不起作用。我在 Windows 7:
上使用 JDK8
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();
}
});
*/
}
}
以上代码对你有用吗?
只有“1”和 "a" 对我有用。 Tab 键对我不起作用。
如果没有,那么您可以 post 一个简单的 SSCCE 来展示您是如何使用它的吗?
编辑:
以上代码适用于以下任一情况:
frame.setVisible( true );
frame.setFocusTraversalKeysEnabled(false);
或者您可以禁用面板的焦点遍历键:
public TabSSCCE()
{
setFocusable(true);
setFocusTraversalKeysEnabled(false);
...
}
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);
但是它没有打印。这与我用于所有其他键的设置相同,但我无法使 Tab 键工作。我试过 "TAB"
、"Tab"
和 "tab"
。
它的正确名称是什么?或者有什么特别之处?
你可能想要:
KeyStroke.getKeyStroke('\t');
\t
is the escape sequence for the TAB character (0x09), which is output by pressing tab on your keyboard.
还有 KeyEvent.VK_TAB
,根据您的用例,这可能更可取。请参阅 KeyEvent
中的文档,详细了解为什么您应该选择其中之一。
我很惊讶 KeyStroke 对你有用,因为 Tab 字符通常由焦点子系统处理。
它对我不起作用。我在 Windows 7:
上使用 JDK8import 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();
}
});
*/
}
}
以上代码对你有用吗?
只有“1”和 "a" 对我有用。 Tab 键对我不起作用。
如果没有,那么您可以 post 一个简单的 SSCCE 来展示您是如何使用它的吗?
编辑:
以上代码适用于以下任一情况:
frame.setVisible( true );
frame.setFocusTraversalKeysEnabled(false);
或者您可以禁用面板的焦点遍历键:
public TabSSCCE()
{
setFocusable(true);
setFocusTraversalKeysEnabled(false);
...
}