Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java UIManager key list

I've seen people use UIManager to change strings of some pre-created swing components (e.g. JFileChooser).

Where can I find some kind of reference that will tell me which strings in which components are changeable, and how can I access them?

To clarify:

I know that UIManager.put(key, newString); will change text of string that key references to, to "newString".

Where can I find the list of keys?

like image 418
Karlovsky120 Avatar asked Sep 12 '12 19:09

Karlovsky120


3 Answers

  • Keys for UIManager are Look and Feels sensitive, means (for example) value Keys for Metal Look and Feel could be diferrent when you comparing value from System Look and Feel, notice or Key missed too

  • use UIManager Defaults by @camickr

like image 160
mKorbel Avatar answered Oct 13 '22 00:10

mKorbel


You're probably best of by dumping the list yourself using code like the following since keys might differ:

public static void printUIManagerKeys()
{
    UIDefaults defaults = UIManager.getDefaults();
    Enumeration<Object> keysEnumeration = defaults.keys();
    ArrayList<Object> keysList = Collections.list(keysEnumeration);
    for (Object key : keysList)
    {
        System.out.println(key);
    }
}

For me the list contains 1365 elements on Windows 10.

like image 32
BullyWiiPlaza Avatar answered Oct 12 '22 22:10

BullyWiiPlaza


These keys are provided by Swing PLAF resource bundles, and you can find them in the JDK sources. See e.g.:

  • http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/com/sun/swing/internal/plaf/basic/resources/basic.java
  • http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/com/sun/java/swing/plaf/windows/resources/windows.java
  • http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/com/sun/java/swing/plaf/gtk/resources/gtk.java
  • ...

String values for languages other than English are provided by adjacent bundle files.

And you can add one more bundle to any of these families just by creating one more file for desired human language and placing it anywhere on your classpath. Bundles in .java and .properties format work equally well, though .java format may be slightly more Unicode-friendly...

It may be good to keep in mind though that direct adding of content to com.sun package may violate the Java license. So to be on the safe side, it may be wise to move your extra resources to a package of your own and register it with UIManager like this:

UIManager.getDefaults().addResourceBundle("mypackage.swing.plaf.basic.resources.basic");
like image 31
Sergey Ushakov Avatar answered Oct 12 '22 23:10

Sergey Ushakov