|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.jdesktop.application.AbstractBean
org.jdesktop.application.ResourceManager
public class ResourceManager
The application's ResourceManager
provides
read-only cached access to resources in ResourceBundles
via the
ResourceMap
class. ResourceManager
is a
property of the ApplicationContext
and most applications
look up resources relative to it, like this:
ApplicationContext appContext = Application.getInstance().getContext(); ResourceMap resourceMap = appContext.getResourceMap(MyClass.class); String msg = resourceMap.getString("msg"); Icon icon = resourceMap.getIcon("icon"); Color color = resourceMap.getColor("color");
ApplicationContext.getResourceMap()
just delegates to its ResourceManager
. The ResourceMap
in this example contains resources from the ResourceBundle named
MyClass
, and the rest of the
chain contains resources shared by the entire application.
Resources for a class are defined by an eponymous ResourceBundle
in a resources
subpackage. The Application class itself
may also provide resources. A complete
description of the naming conventions for ResourceBundles is provided
by the getResourceMap()
method.
The mapping from classes and Application
to a list
ResourceBundle names is handled by two protected methods:
getClassBundleNames
,
getApplicationBundleNames
.
Subclasses could override these methods to append additional
ResourceBundle names to the default lists.
ApplicationContext.getResourceManager()
,
ApplicationContext.getResourceMap(java.lang.Class)
,
ResourceMap
Constructor Summary | |
---|---|
protected |
ResourceManager(ApplicationContext context)
Construct a ResourceManager . |
Method Summary | |
---|---|
protected ResourceMap |
createResourceMap(java.lang.ClassLoader classLoader,
ResourceMap parent,
java.util.List<java.lang.String> bundleNames)
Called by getResourceMap(java.lang.Class, java.lang.Class) to construct ResourceMaps . |
java.util.List<java.lang.String> |
getApplicationBundleNames()
The names of the ResourceBundles to be shared by the entire application. |
protected java.util.List<java.lang.String> |
getClassBundleNames(java.lang.Class cls)
Map from a class to a list of the names of the ResourceBundles specific to the class. |
protected ApplicationContext |
getContext()
|
java.lang.String |
getPlatform()
The value of the special Application ResourceMap resource named "platform". |
ResourceMap |
getResourceMap()
Returns the chain of ResourceMaps that's shared by the entire application, beginning with the resources defined for the application's class, i.e. |
ResourceMap |
getResourceMap(java.lang.Class cls)
Return the ResourcedMap chain for the specified class. |
ResourceMap |
getResourceMap(java.lang.Class startClass,
java.lang.Class stopClass)
Returns a chain of ResourceMaps
that encapsulate the ResourceBundles for each class
from startClass to (including) stopClass . |
void |
setApplicationBundleNames(java.util.List<java.lang.String> bundleNames)
Specify the names of the ResourceBundles to be shared by the entire application. |
void |
setPlatform(java.lang.String platform)
Defines the value of the special Application ResourceMap resource named "platform". |
Methods inherited from class org.jdesktop.application.AbstractBean |
---|
addPropertyChangeListener, addPropertyChangeListener, firePropertyChange, firePropertyChange, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
protected ResourceManager(ApplicationContext context)
ResourceManager
. Typically applications
will not create a ResourceManager directly, they'll retrieve
the shared one from the ApplicationContext
with:
Application.getInstance().getContext().getResourceManager()Or just look up
ResourceMaps
with the ApplicationContext
convenience method:
Application.getInstance().getContext().getResourceMap(MyClass.class)FIXME - @param javadoc
ApplicationContext.getResourceManager()
,
ApplicationContext.getResourceMap(java.lang.Class)
Method Detail |
---|
protected final ApplicationContext getContext()
public ResourceMap getResourceMap(java.lang.Class startClass, java.lang.Class stopClass)
chain
of ResourceMaps
that encapsulate the ResourceBundles
for each class
from startClass
to (including) stopClass
. The
final link in the chain is Application ResourceMap chain, i.e.
the value of getResourceMap()
.
The ResourceBundle names for the chain of ResourceMaps
are defined by getClassBundleNames(java.lang.Class)
and
getApplicationBundleNames()
. Collectively they define the
standard location for ResourceBundles
for a particular
class as the resources
subpackage. For example, the
ResourceBundle for the single class com.myco.MyScreen
, would
be named com.myco.resources.MyScreen
. Typical
ResourceBundles are ".properties" files, so: com/foo/bar/resources/MyScreen.properties
. The following table
is a list of the ResourceMaps and their constituent
ResourceBundles for the same example:
ResourceMap | ResourceBundle names | Typical ResourceBundle files | |
---|---|---|---|
1 | class: com.myco.MyScreen | com.myco.resources.MyScreen | com/myco/resources/MyScreen.properties |
2/td> | application: com.myco.MyApp | com.myco.resources.MyApp | com/myco/resources/MyApp.properties |
3 | application: javax.swing.application.Application | javax.swing.application.resources.Application | javax.swing.application.resources.Application.properties |
None of the ResourceBundles are required to exist. If more than one ResourceBundle contains a resource with the same name then the one earlier in the list has precedence
ResourceMaps are constructed lazily and cached. One ResourceMap is constructed for each sequence of classes in the same package.
startClass
- the first class whose ResourceBundles will be includedstopClass
- the last class whose ResourceBundles will be included
ResourceMap
chain that contains resources loaded from
ResourceBundles
found in the resources subpackage for
each class.getClassBundleNames(java.lang.Class)
,
getApplicationBundleNames()
,
ResourceMap.getParent()
,
ResourceMap.getBundleNames()
public final ResourceMap getResourceMap(java.lang.Class cls)
getResourceMap(cls, cls)
.
cls
- the class that defines the location of ResourceBundles
ResourceMap
that contains resources loaded from
ResourceBundles
found in the resources subpackage of the
specified class's package.getResourceMap(Class, Class)
public ResourceMap getResourceMap()
applicationClass
property.
If the applicationClass
property has not been set, e.g. because
the application has not been launched
yet,
then a ResourceMap for just Application.class
is returned.
ApplicationContext.getResourceMap()
,
ApplicationContext.getApplicationClass()
public java.util.List<java.lang.String> getApplicationBundleNames()
The default value for this property is a list of per-class
ResourceBundle names, beginning
with the Application's
class and of each of its
superclasses, up to Application.class
.
For example, if the Application's class was
com.foo.bar.MyApp
, and MyApp was a subclass
of SingleFrameApplication.class
, then the
ResourceBundle names would be:
The default value of this property is computed lazily and
cached. If it's reset, then all ResourceMaps cached by
getResourceMap
will be updated.
setApplicationBundleNames(java.util.List)
,
getResourceMap(java.lang.Class, java.lang.Class)
,
getClassBundleNames(java.lang.Class)
,
ApplicationContext.getApplication()
public void setApplicationBundleNames(java.util.List<java.lang.String> bundleNames)
getApplicationBundleNames()
method.
setApplicationBundleNames(java.util.List)
protected java.util.List<java.lang.String> getClassBundleNames(java.lang.Class cls)
ResourceBundles
specific to the class.
The list is in priority order: resources defined
by the first ResourceBundle shadow resources with the
the same name that come later.
By default this method returns one ResourceBundle
whose name is the same as the class's name, but in the
"resources"
subpackage.
For example, given a class named
com.foo.bar.MyClass
, the ResourceBundle name would
be "com.foo.bar.resources.MyClass"
. If MyClass is
an inner class, only its "simple name" is used. For example,
given an inner class named com.foo.bar.OuterClass$InnerClass
,
the ResourceBundle name would be
"com.foo.bar.resources.InnerClass"
.
This method is used by the getResourceMap
methods
to compute the list of ResourceBundle names
for a new ResourceMap
. ResourceManager subclasses
can override this method to add additional class-specific
ResourceBundle names to the list.
cls
- the named ResourceBundles are specific to cls
.
cls
getResourceMap(java.lang.Class, java.lang.Class)
,
getApplicationBundleNames()
protected ResourceMap createResourceMap(java.lang.ClassLoader classLoader, ResourceMap parent, java.util.List<java.lang.String> bundleNames)
getResourceMap(java.lang.Class, java.lang.Class)
to construct ResourceMaps
.
By default this method is effectively just:
return new ResourceMap(parent, classLoader, bundleNames);Custom ResourceManagers might override this method to construct their own ResourceMap subclasses.
public java.lang.String getPlatform()
setPlatform(java.lang.String)
public void setPlatform(java.lang.String platform)
myLabel.text.osx = A value that's appropriate for OSX myLabel.text.default = A value for other platforms myLabel.text = myLabel.text.${platform}
By default the value of this resource is "osx" if the
underlying operating environment is Apple OSX or "default".
To distinguish other platforms one can reset this property
based on the value of the "os.name"
system property.
This method should be called as early as possible, typically
in the Application initialize
method.
getPlatform()
,
System.getProperty(java.lang.String)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |