Платформа NetBeans: определение действия в нескольких категориях

#java #action #netbeans-8 #netbeans-platform

#java #Экшен #netbeans-8 #netbeans-платформа

Вопрос:

Я разрабатываю приложение на платформе NetBeans (версия 8.1). Я определяю действие как следующий пример:

 @ActionID(
    category = "MyCategory",
    id = "my.action.id"
)
@ActionRegistration(
    displayName = "My Action", lazy = false
)
public final class MyAction extends AbstractAction implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
        // Do some works
    }
}
  

Я хочу добавить это действие в несколько категорий. Другими словами, я хочу получить доступ к этому действию из нескольких категорий. Возможно ли это без создания другого класса? Например, что-то вроде этого:

 @ActionID(
    category = {"Category1", "Category2"},
    id = "my.action.id"
)
...
...
  

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

1. Почему вы не хотите создавать другой класс? Вы также можете просто перенаправить действие на другой метод после выполнения его первой работы

2. @Joe Только из соображений повторного использования. У меня есть много действий, доступ к которым будет осуществляться из нескольких мест (категорий). Итак, я хочу создать один класс для каждого действия, чтобы улучшить обработку ошибок и обслуживание.

Ответ №1:

У меня есть много действий, к которым можно будет получить доступ из более чем одного места (категории)

Если вы имеете в виду, что из нескольких мест пользовательского интерфейса можно вызвать более одного действия, например, действие Редактирования можно получить из пункта меню И кнопки панели инструментов, тогда вам следует использовать @ActionReferences() в вашем действии:

 @ActionID(
     category = "MyCategory",
     id = "my.action.id"
)
@ActionRegistration(
    displayName = "Edit", 
    lazy = false)
@ActionReferences(
{
    @ActionReference(path="Toolbar/Edit", position=300),
    @ActionReference(path="Menu/Edit", position=500),
    @ActionReference(path="Shortcuts", name="C-F2"),
})
  

Категория и идентификатор ActionID просто определяют местоположение ссылки на действие в вашем файле уровня .xml: «Действия / категория / идентификатор». Категория обычно используется для группировки действий, принадлежащих всплывающему меню, потому что Netbeans позволяет легко создать его с помощью Utilities.actionsForPath(«Действия / категория»), затем Utilities.actionsToPopup() с возвращенными действиями.