DevFaqHowToDefineTheKeyMapCategoryForAnAction
Contents |
How do I define and localise the keymap category of an action?
Keymap category for @ActionID
- The category of the @ActionID-annotation of the action defines the keymap category, which is shown in the keymap options. The category is the name of the "Actions"-subfolder within the layer.xml, which is generated from the annotations. From
@ActionID(category = "MyOwnLabel", id = "com.sample.MyAction")
the following layer.xml content is generated
<filesystem> <folder name="Actions"> <folder name="MyOwnLabel"> <!-- action registration follows --> </folder> </folder> </filesystem>
- If you want to localise the category (or include a '/' in its name), then you have to use the attribute "
SystemFileSystem.localizingBundle
" for the folder. Create a layer.xml (via wizard), duplicate the folder structure and add the attribute for localisation. This explicit layer.xml file and the autogenerated layer.xml-file will be merged automatically. The referred bundle key is an absolute path based on the folder structure. For example:Actions/MyOwnLabel=Shiny new category
Example The following action is shown in the localised "Shiny new category" category.
package com.sample; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import org.openide.awt.ActionID; import org.openide.awt.ActionRegistration; import org.openide.util.NbBundle.Messages; @ActionID( category = "MyOwnLabel", id = "com.sample.MyAction" ) @ActionRegistration( displayName = "#CTL_MyAction" ) @Messages("CTL_MyAction=Execute xyz") public final class MyAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO implement action body } }
Excerpt of layer.xml:
<filesystem> <folder name="Actions"> <folder name="MyOwnLabel"> <attr name="SystemFileSystem.localizingBundle" stringvalue="com.sample.Bundle"/> </folder> </folder> </filesystem>
Bundle:
Actions/MyOwnLabel=Shiny new category
Keymap category for @EditorActionRegistration
The category of the @EditorActionRegistration-annotation of the action defines the keymap category (since NB 8.2 Issue 171261)
The category is defined the subfolder in "OptionsDialog/Actions".
@EditorActionRegistrations({ @EditorActionRegistration(name = "add-caret-up", category = "edit.multicaret") }) public class AddCaretAction extends ... { }
Excerpt of layer.xml:
<filesystem> <folder name="OptionsDialog"> <folder name="Actions"> <folder name="edit.multicaret"> <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.modules.editor.actions.Bundle"/> <file name="add-caret-up"> <!--org.netbeans.modules.editor.actions.AddCaretAction--> </file> </folder> </folder> </folder> </filesystem>
Bundle:
OptionsDialog/Actions/edit.multicaret=Edit (Multicaret)