添加tab键javaswing键绑定——正确的名称是什么?

mlmc2os5  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(374)
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" .
它的正确名称是什么?还是有什么特别的?

mm9b1k5b

mm9b1k5b1#

我很惊讶击键对您有效,因为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键对我不起作用。
如果没有,那么你能发布一个简单的sscce来展示你是如何使用它的吗?
编辑:
上述代码将用于以下任一项:

frame.setVisible( true );
frame.setFocusTraversalKeysEnabled(false);

或者可以禁用面板的焦点遍历键:

public TabSSCCE()
{
    setFocusable(true);
    setFocusTraversalKeysEnabled(false);

    ...
}
xienkqul

xienkqul2#

你可能想要:

KeyStroke.getKeyStroke('\t');
``` `\t` 是制表符(0x09)的转义序列,通过按键盘上的制表符输出。
还有 `KeyEvent.VK_TAB` 根据您的用例,哪一种可能更可取。请参阅中的文档 `KeyEvent` 更多关于为什么你应该选择一个或另一个。

相关问题