Mit einer ProjectSensitiveAction kann man wunderbar eine Action erzeugen, die zu einem bestimmten Projekt ausgeführt werden soll. Das schöne daran ist. dass diese Action auch dann funktionieren, wenn im Projektbaum ein Unterknoten des Projektes ausgewählt ist.

Leider hat die Utilities-Methode projectSensitiveAction den Haken, dass hier explizit ein Icon angegeben werden muss statt einer iconBase. Dies führt dazu, dass für eine solche Action in der Toolbar und im Menü nur ein einzelnes Icon anzeigt wird. Also ist das Icon entweder in der Toolbar zu klein oder im Menü zu groß. Auch die Funktion, dass man die Icongröße in der Toolbar verändern kann, kann nicht sinnvoll genutzt werden.

Bei der Suche durch die NetBeans Quellen ist mir dann aufgefallen, dass für die Buttons in der Toolbar nach einem Action-Attribut "iconBase" gesucht wird um die korrekte Größe für das Icon zu bestimmen. Setzt man dieses Attribut bei der generierten ProjectSensitiveAction, so wird auch dessen Icon korrekt in der Toolbar angezeigt:

1
2
3
4
5
ImageIcon menuIcon = ImageUtilities.loadImageIcon(iconPath, true);
Action action = ProjectSensitiveActions.projectSensitiveAction(
    performer, displayName, menuIcon);
//Workaround um in Toolbar die korrekte Groesse anzuzeigen.
action.putValue("iconBase", iconPath);

menuIcon ist dabei das „Grund-Icon“ in der Größe 16×16 Pixel, wie man es von den Actions in NetBeans gewohnt ist. Dessen iconPath ist der Resourcenpfad, welcher auch für die "iconBase" genutzt werden kann.