В Groovy SwingBuilder, как мне прикрепить нажатия клавиш к пункту меню?

#groovy

#groovy

Вопрос:

Недавно я прочитал о Groovy Swing Builder и хочу добавить прослушиватели нажатий клавиш для элементов меню. У меня есть следующий код:

 import javax.swing.*
import groovy.swing.SwingBuilder
swing = new SwingBuilder()
menuHelper = swing.action(name: "Hello",mnemonic:'P',acclerator: 'ctrl P',keyStrokes:'ctrl P', closure : { println "Hi you have used Menu via keyStroke" })
frame = swing.frame(title : "Anto", show : true , pack : true, size :[100,100] ){
        panel{
        menuBar {
        menu('File'){
                menuItem(action : menuHelper)
                }
        }
}
}
  

Я создал menuHelper action для этой цели и нацелен на menuItem , и он не работает с помощью нажатий клавиш. Однако он работает, когда я нажимаю на свое меню File , а затем Hello , таким образом печатая :

    //Output: Hi you have used Menu via keyStroke
  

Я не знаю, где я ошибся. Заранее спасибо.

Ответ №1:

У вас опечатка:

 acclerator
  

должно быть

 accelerator
  

Комментарии:

1. Нет, SwingBuilder делегирует вызовы объекту Factory (в данном случае groovy.swing.factory.ActionFactory ). Этот класс выбирает требуемые параметры из карты, которую вы передали. Если у вас есть опечатка в имени параметра, и это не обязательно, то будет просто предположено, что вы ее не указали

2. О, это прекрасно …, но откуда у вас такие знания? Какую книгу вы читали для Groovy?

3. Лучшая книга IMO для Groovy — «Groovy в действии» ( скоро выйдет 2-е издание ). Нашел ответ на последний комментарий, просмотрев исходный код Groovy. Вы можете загрузить его с помощью subversion , а затем посмотреть, как это работает 🙂

4. Я тоже изучаю Groovy из Groovy in action , но в первом издании… В любом случае спасибо за ответ и предложение: D