2015-02-09 2 views
0

Я пишу приложение на Java, где мне нужно, чтобы одна вещь случалась, когда пользователь нажимает клавиши букв и что-то другое, когда пользователь нажимает ENTER, но я не могу получить ключевое имя, когда я нажимаю ENTER, только новый линия.Как я могу получить KeyStroke для клавиши ENTER с помощью ActionEvent?

Я думаю, что я должен использовать getKeyStroke, но я не уверен, что это возможно, потому что я использую ActionEvent.

Это то, что я делал до сих пор:

panelMaster.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("A"), "doSomething"); 
panelMaster.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("B"), "doSomething"); 
panelMaster.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("C"), "doSomething"); 
panelMaster.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("ENTER"), "doSomething"); 
panelMaster.getActionMap().put("doSomething", anAction); 

Тогда у меня есть отдельный класс с действий.

class AnAction extends AbstractAction{   
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Received: " + e.getActionCommand()); 
    }  
} 

Когда я ввожу две серии «а», затем «Ъ», то «с», а затем «ENTER» это то, что мой выход выглядит следующим образом:

Received: a 
Received: b 
Received: c 
Received: 

Received: a 
Received: b 
Received: c 
Received: 
+1

Если вы хотите что-то другое должно произойти, когда вы используете Ent er, затем создайте собственное действие. Не пытайтесь использовать одно действие для всех клавиш. – camickr

+0

Хорошо, я попробовал, и хотя он выполняет эту работу, потому что это отдельный класс Action, я все еще не могу использовать «e.getKeyStroke() или что-то подобное, что скажет мне, какой ключ был нажат». Я не знаю. Думаю, я, наверное, делаю что-то действительно глупое. –

ответ

0

Вы можете использовать KeyStroke.getKeyStroke (KeyEvent.VK_ENTER, 0)

+0

Я не знаю, почему это меня так смущает. Я не уверен, где я должен использовать «(KeyEvent.VK_ENTER, 0)». Я могу использовать его вместо «ENTER», когда я объявляю событие, но все же я не могу выполнить «e.getKeyStroke()» в действии. –

+0

Ох. Прошу прощения за путаницу. Я неправильно истолковал ваш вопрос как неспособный обнаружить нажатие клавиши ввода. – NetherMole

+0

KeyStroke.getKeyStroke ожидает определенный тип строки, как показано ниже: http://docs.oracle.com/javase/7/docs/api/javax/swing/KeyStroke.html#getKeyStroke(java.lang.String) Если строка содержит один символ, она ожидает одиночный символ юникода. Символ unicode для 'enter' или 'return' показан здесь: http://www.fileformat.info/info/unicode/char/23ce/index.htm В Java escape-последовательности используются для определения unicode персонажи. Так что в вашем случае «\ u23CE» может быть строкой для распознавания ключа ввода. Я мало знаю о событиях. – NetherMole

0

Попробуйте это:

panelMaster.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) 
      .put(KeyStroke.getKeyStroke("pressed ENTER"), "doSomething"); 
panelMaster.getActionMap().put("doSomething", anAction);