I am working on a Desktop app with the Netbeans RCP. I have a number of menu items that are beeing added to the menu through annotations in the TopComponents. I would like to be able to disable several of these menu items, depending on the access rights of the logged user.
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
see Oracle tutorial How to Use Menus, run code examples
use
Xxx.setEnabled(false)
forJMenu
,JMenuItem
,JRadioButtonMenuItem
andJCheckBoxMenuItem
One way to do this in the NetBeans Platform is to register a Presenter.Menu in the menu:
When you register a
Presenter.Menu
in the menu thegetMenuPresenter()
method is called by the platform to get the actualJMenuItem
that is added to the menu.Normally you would just construct a
JMenuItem
here but since you need to be able to get a hold of it in other parts of the application you'll need to keep some kind of registry of your menu items so that you'll be retrieving the same instance.One way to do this is to register all of your ACL'd menu items as a
ServiceProvider
. In this way you canLookup
all of them when you need to enable/disable them.A
ServiceProvider
interface:A
ControllableMenuItem
implementation registered as aServiceProvider
:Now you can
Lookup
all of theControllableMenuItem
s when you need to enable/disable them:However there's one more piece for this to work properly. You need a way to guarantee that the
Presenter.Menu
is getting the same instance that theLookup
is getting. One way to do this - admittedly not very elegant - is to register theMenuItem
as a@ServiceProvider
for itself and look this up ingetMenuPresenter()
:In this way you are guaranteed to get the same instance whenever you
Lookup
yourControllableMenuItem
s.This is only one way of doing this. The point here is that you need to have a mechanism in place to get the same instances of all of your ACL'd menu items when you need to disable them.
Another approach to controlling what menu items actually make it into the menu system is to create separate modules for each level of access and simply disable modules when users aren't authorized for a particular group of functionality. This is beneficial in many respects and is one of the strengths of using a modular system.