Хотя event.getSource () определенно сообщит вам, с какой именно конкретной кнопки произошло событие, побочным эффектом является необходимость отслеживать сгенерированные кнопки или отслеживать кнопку. Также вы можете захотеть представить пользователю другое имя библиотеки (возможно, включая информацию о версии), чем оно используется для идентификации библиотеки. Использование свойства «ActionCommand» кнопки может обеспечить способ разделения этих проблем. Поэтому вам нужно будет изменить код при генерации пунктов меню-флажка и в слушателе.
ActionListener actionListener = ... // whatever object holds the method, possibly this
String[] libraries = ... // however you get your library names
JMenu parentMenu = ... // the menu you are adding them to
for (String s : libraries) {
// prettyName is a method to make a pretty name, perhaps trimming off
// the leading path
JCheckBoxMenuItem child = new JCheckBoxMenuItem(prettyName(s), true);
child.setActionCommand(s);
parentMenu.acc(child);
}
Код обработчика действий будет ...
public void actionPerformed(ActionEvent evt) {
// the 'current' selection state, i.e. what it is going to be after the event
boolean selected = ((JCheckBoxMenuItem)evt.getSource()).isSelected();
String library = evt.getActionCommand();
... process based on library and state here...
}