Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing中删除的按键_Java_Macos_Keyboard Events - Fatal编程技术网

Java Swing中删除的按键

Java Swing中删除的按键,java,macos,keyboard-events,Java,Macos,Keyboard Events,我正在尝试使用InputMap/ActionMap截取删除键。我让它与Enter一起工作,但它似乎没有与delete一起响应(这是在macosx上,所以我想知道这是否是问题的一部分) 我做错了什么 private void setupKeyBindings(final JList jlist) { String delAction = "deleteItems"; KeyStroke delKey = KeyStroke.getKeyStroke("DELETE"

我正在尝试使用InputMap/ActionMap截取删除键。我让它与Enter一起工作,但它似乎没有与delete一起响应(这是在macosx上,所以我想知道这是否是问题的一部分)

我做错了什么

private void setupKeyBindings(final JList jlist) {
        String delAction = "deleteItems";
        KeyStroke delKey = KeyStroke.getKeyStroke("DELETE");
        jlist.getInputMap().put(delKey, delAction);
        jlist.getActionMap().put(delAction, new AbstractAction()
        {
            @Override public void actionPerformed(ActionEvent e) {
                System.out.println("delete pressed");
                doDelete(jlist);
            }
        });     

        String enterAction = "useItems";
        KeyStroke enterKey = KeyStroke.getKeyStroke("ENTER");
        jlist.getInputMap().put(enterKey, enterAction);
        jlist.getActionMap().put(enterAction, new AbstractAction()
        {
            @Override public void actionPerformed(ActionEvent e) {
                System.out.println("enter pressed");
            }
        });
    }
嗯,我Mac电脑上的“delete”键似乎映射到KeyListener键码8,我认为这是退格。(我的Mac键盘上只有一个删除键,而不是一个单独的退格键,而Windows PC键盘上有这两个键)

以下内容适用于Mac映射到命令Delete:

KeyStroke delKey = KeyStroke.getKeyStroke(
   KeyEvent.VK_BACK_SPACE, InputEvent.META_MASK);

为我工作。

这并不能直接回答你的问题,但这回答了我的问题:

deleteAction.putValue(
    javax.swing.Action.ACCELERATOR_KEY,
    KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)
);

您可以在此处找到其他KeyEvent整数常量:

您是否尝试过
击键.getKeyStrokeForEvent(KeyEvent.VK_DELETE)
?这是在黑暗中拍摄的,但是如何
击键。getKeyStroke(“BACKSPACE”)
?正确;Mac使用“删除”一词来表示任何其他键盘上的退格。要执行真正的“删除”,用户需要按住“fn”,然后按“删除”。仅供参考。谢谢,但这在Mac上不起作用(至少在编写原始问题时不起作用),因为delete键映射到Java的“backspace”概念。@JasonS是的,我知道这一点。但是这里接受的答案在我的windows机器上不适用,所以我在这里为遇到这个问题的windows用户发布这个答案。这个问题有
osx
标签。@JasonS是的,我知道。但这是我在谷歌搜索中最先出现的一个,所以我把我的答案贴在这里,让其他最先找到这个页面的用户知道。好吧,很公平!你可以发布自己的问题并回答它。
deleteAction.putValue(
    javax.swing.Action.ACCELERATOR_KEY,
    KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0)
);