Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Should UIManager fire propertyChangeEvents here?

843807Jan 27 2010 — edited Feb 11 2010
I have a java desktop application that behaves badly after the user changes the display properties under MS-Windows.
The situation is this:
Start the application.
Right-click on the Windows desktop, bring up the Display Properties dialog, and change the theme, color scheme, font size, etc. Click apply. A tree in my app that extends JTree now paints incorrectly. There are probably other issues as well, but this is an obvious starting point.

After some investigating, I came to the conclusion that I need to call:
SwingUtilities.updateComponentTreeUI(component);
when things like this change, and the way to know that things like this have changed is to register a PropertyChangeListener on the UIManager.

So to start out, I created a simple test app, with this code in the constructor:

UIManager.addPropertyChangeListener(new PropertyChangeListener()
{
public void propertyChange( PropertyChangeEvent e )
{
System.out.println( "UIManager propertyChange " + e.getPropertyName());
}
});

I then ran the app (in NetBeans), changed display properties in Windows, and got nothing printed out.
However, if in response to a button push, I change the LookAndFeel programmatically:

if (!flipFlop_)
{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
flipFlop_ = true;
}
else
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
flipFlop_ = false;
}

When I do that, I see this printed out:

UIManager propertyChange lookAndFeel

But I need to detect that UI settings have changed due to actions outside of my app, maybe outside of the JRE? Shouldn't the UIManager be firing something here? Or is there some other static object that I need to register with? I see that a PropertyChangeListener can be added to the Toolkit object, but it requires the name of the property, and there may be many properties and I don't know the names of them.

Comments

Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Mar 11 2010
Added on Jan 27 2010
5 comments
336 views