In the old days, one could listen on changes in the "activated nodes" of the active TopComponent with a listener on TopComponent.Registry paying attention to the PROP_ACTIVATED_NODES property.
Now Lookup is a much nicer way to show activate "objects". The way to listen globally to
changes in the Lookup of the active TopComponent is via Utilities.actionsGlobalContext() (which is a Lookup itself).
The trick is simple, you add a LookupListener on the Lookup.Result you get from Utilities.actionsGlobalContext().lookup(yourLookupTemplete) .
What is the garbage collection trick ?
Well, it's quite odd for me the existence of the Lookup.Result class. Because you don't do something like Lookup.addLookupListener(yourLookupTemplate, yourLookupListener). If you were to do something like this, you would expect that your listener lives as much as the Lookup. Meaning in the case of a "global" listener -- forever.
But what you do do is actually add a listener on Lookup.Result, which could be garbage collected and thus your listener also.
Generally, keep a hard reference on the Lookup.Result (or make a closure on it with some final keyword and a reference from the anonymous listener). Because if you don't -- the garbage collector might kick in quite soon and your listener won't be called.
Wednesday, November 22, 2006
Monday, November 20, 2006
NetBeans Platform: Branded resources
OK, you've probably been here too: how does one load a Branded resource ? Let's say... the splash screen.
Well, let me tell you the stages you might try after you've found out that it's "org/netbeans/core/startup/splash.gif" :
So ? What is the solution ? Well, it's Utilities.loadImage(string, true) . This is the only one that does the localized/branded woodoo. I'm still not certain why the nbres:// stuff didn't work...
Well, let me tell you the stages you might try after you've found out that it's "org/netbeans/core/startup/splash.gif" :
- Use the ClassLoader from Lookup to load the resource. What does this do ? It returns the default, non-branded splash.
- getClass().getResource(). Same as above.
- new URL(). Wrong !
- Utilities.loadImage(string). Still wrong.
So ? What is the solution ? Well, it's Utilities.loadImage(string, true) . This is the only one that does the localized/branded woodoo. I'm still not certain why the nbres:// stuff didn't work...
Subscribe to:
Posts (Atom)
The Trouble with Harry time loop
I saw The Trouble with Harry (1955) a while back and it didn't have a big impression on me. But recently I rewatched it and was amazed a...
-
As Apache NetBeans became a top level Apache project and finished the incubation process I was asked for an interview and my photo. Only ...
-
I like making NetBeans dance: NetBeans - PalmOfMyHand - Dance Demo from Emilian Bold on Vimeo . The above video is a little somethi...
-
People will never bother to do anything manual unless absolutely necessary. This is why I believe the current NetBeans "empty" jav...