添加 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);

    ...
}