#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