KeyStroke для удаления в Java Swing - PullRequest
3 голосов
/ 03 февраля 2011

Я пытаюсь использовать InputMap / ActionMap для перехвата ключа удаления.Я заставляю его работать с Enter, но, похоже, он не отвечает удалением (это на Mac OSX, поэтому мне интересно, не является ли это частью проблемы).*

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");
            }
        });
    }

Ответы [ 3 ]

7 голосов
/ 03 февраля 2011

Хм. Клавиша «удалить» на моем Mac, кажется, соответствует коду ключа KeyListener 8, который я считаю backspace. (На моей клавиатуре Mac есть только клавиша удаления, а не отдельная клавиша Backspace, в отличие от клавиатур на ПК с Windows)

Похоже, что следующее работает для Mac для сопоставления с Command-Delete:

KeyStroke delKey = KeyStroke.getKeyStroke(
   KeyEvent.VK_BACK_SPACE, InputEvent.META_MASK);
3 голосов
/ 09 ноября 2012
KeyStroke.getKeyStroke("BACK_SPACE");

работал для меня.

1 голос
/ 23 января 2016

Это прямо не ответит на ваш вопрос, но ответ на мой:

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

Вы можете найти другие целочисленные константы KeyEvent здесь: https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html

...