2013-11-15 1 views
1

Мне, должно быть, что-то не хватает, но я не могу понять, почему работают InputEvent.CTRL_DOWN_MASK или InputEvent.CTRL_MASK?Выполнение CTRL_MASK в событии Swing Action

То, что я пытаюсь сделать, это реализовать способ для Ctrl-C выдать команду в графическом интерфейсе Swing. Я использую следующий код:

myTextArea.getInputMap(JComponent.WHEN_FOCUSED).put(
     KeyStroke.getKeyStroke((char) 'c', /***/InputEvent.CTRL_DOWN_MASK/***/), "ctrl"); 
    myTextArea.getActionMap().put("ctrl", new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("test"); 
    } 
    }); 

Обратите внимание на InputEvent.CTRL_DOWN_MASK. Когда я держу его там, действие никогда не будет выполнено. Когда я закомментировать, действие работает (но я только нажав строчной «C» кнопку. Не ctrl.

Могу ли я что-то отсутствует, как на самом деле использовать CTRL_MASK для распашных ключевых событий?

ответ

2

Я пропускаю что-то о том, как на самом деле использовать CTRL_MASK для качания ключевых событий?

  • вы должны поместить этот в в параметре InputMap

, например. inputMap.put(KeyStroke.getKeyStroke(myKey, InputEvent.CTRL_DOWN_MASK), someName);

+0

ОП в вызове 'getInputMap (...). Put (KeyStroke, String)' в примере. – Josh

+0

@Space Pope CTRL, SHIFT .... являются модификаторами – mKorbel

+0

@Space Папа хороший улов, спасибо, я поставил там SHIFT ..... – mKorbel

1

Это выглядит в основном прямо ко мне, но попробовать

KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK); 

вместо

KeyStroke.getKeyStroke((char) 'c', InputEvent.CTRL_DOWN_MASK); 

т.е. не полагаться на int интерпретации char значений передать свой код ключа; используйте константы «виртуальной клавиатуры» Java.

+0

Я делал это раньше, но использовал только капитал «C» –

+0

Хмм, после того как я перезапустил свой компьютер, теперь он работает. Интересно... –