Class SingleFrameApplication
- Direct Known Subclasses:
ActionMapExample,BlockingExample1,DocumentExample,PeriodicTaskExample,SelectedPropertyExample,SingleFrameExample1,SingleFrameExample2,SingleFrameExample3,SingleFrameExample4,SingleFrameExample5,SingleFrameExample6
This class takes care of component property injection, exit processing, and saving/restoring session state in a way that's appropriate for simple single-frame applications. The application's JFrame is created automatically, with a WindowListener that calls exit() when the window is closed. Session state is stored when the application shuts down, and restored when the GUI is shown.
To use SingleFrameApplication, one need only override
startup, create the GUI's main panel, and apply
show to that. Here's an example:
class MyApplication extends SingleFrameApplication {
@Override protected void startup() {
show(new JLabel("Hello World"));
}
}
The call to show in this example creates a JFrame (named
"mainFrame"), that contains the "Hello World" JLabel. Before the
frame is made visible, the properties of all of the components in
the hierarchy are initialized with
ResourceMap.injectComponents
and then restored from saved session state (if any) with
SessionStorage.restore.
When the application shuts down, session state is saved.
A more realistic tiny example would rely on a ResourceBundle for the JLabel's string and the main frame's title. The automatic injection step only initializes the properties of named components, so:
class MyApplication extends SingleFrameApplication {
@Override protected void startup() {
JLabel label = new JLabel();
label.setName("label");
show(label);
}
}
The ResourceBundle should contain definitions for all of the
standard Application resources, as well the main frame's title
and the label's text. Note that the JFrame that's implicitly
created by the show method is named "mainFrame".
# resources/MyApplication.properties
Application.id = MyApplication
Application.title = My Hello World Application
Application.version = 1.0
Application.vendor = Sun Microsystems, Inc.
Application.vendorId = Sun
Application.homepage = http://www.javadesktop.org
Application.description = An example of SingleFrameApplication
Application.lookAndFeel = system
mainFrame.title = ${Application.title} ${Application.version}
label.text = Hello World
-
Nested Class Summary
Nested classes/interfaces inherited from class org.jdesktop.application.Application
Application.ExitListener -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidconfigureWindow(Window root) Initialize the hierarchy with the specified root by injecting resources.final JFrameReturn the JFrame used to show this application.protected final voidsetMainFrame(JFrame mainFrame) Sets the JFrame use to show this application.protected voidshow(JComponent c) Show the specified component in themain frame.voidInitialize and show the JDialog.voidInitialize and show the secondary JFrame.voidprotected voidshutdown()Save session state for the component hierarchy rooted by the mainFrame.Methods inherited from class org.jdesktop.application.Application
addExitListener, end, exit, exit, getContext, getExitListeners, getInstance, getInstance, hide, initialize, launch, quit, ready, removeExitListener, startupMethods inherited from class org.jdesktop.application.AbstractBean
addPropertyChangeListener, addPropertyChangeListener, firePropertyChange, firePropertyChange, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
-
Constructor Details
-
SingleFrameApplication
public SingleFrameApplication()
-
-
Method Details
-
getMainFrame
Return the JFrame used to show this application.The frame's name is set to "mainFrame", its title is initialized with the value of the
Application.titleresource and aWindowListeneris added that callsexitwhen the user attempts to close the frame.This method may be called at any time; the JFrame is created lazily and cached. For example:
protected void startup() { getMainFrame().setJMenuBar(createMenuBar()); show(createMainPanel()); }- Returns:
- this application's main frame
- See Also:
-
setMainFrame
Sets the JFrame use to show this application.This method should be called from the startup method by a subclass that wants to construct and initialize the main frame itself. Most applications can rely on the fact that {code getMainFrame} lazily constructs the main frame and initializes the
mainFrameproperty.If the main frame property was already initialized, either implicitly through a call to
getMainFrameor by explicitly calling this method, an IllegalStateException is thrown. IfmainFrameis null, an IllegalArgumentException is thrown.This property is bound.
- Parameters:
mainFrame- the new value of the mainFrame property- See Also:
-
configureWindow
Initialize the hierarchy with the specified root by injecting resources.By default the
showmethodsinject resourcesbefore initializing the JFrame or JDialog's size, location, and restoring the window's session state. If the app is showing a window whose resources have already been injected, or that shouldn't be initialized via resource injection, this method can be overridden to defeat the default behavior.- Parameters:
root- the root of the component hierarchy- See Also:
-
show
Show the specified component in themain frame. Typical applications will call this method after constructing their main GUI panel in thestartupmethod.Before the main frame is made visible, the properties of all of the components in the hierarchy are initialized with
ResourceMap.injectComponentsand then restored from saved session state (if any) withSessionStorage.restore. When the application shuts down, session state is saved.Note that the name of the lazily created main frame (see
getMainFrame) is set by default. Session state is only saved for top level windows with a valid name and then only for component descendants that are named.Throws an IllegalArgumentException if
cis null- Parameters:
c- the main frame's contentPane child
-
show
Initialize and show the JDialog.This method is intended for showing "secondary" windows, like message dialogs, about boxes, and so on. Unlike the
mainFrame, dismissing a secondary window will not exit the application.Session state is only automatically saved if the specified JDialog has a name, and then only for component descendants that are named.
Throws an IllegalArgumentException if
cis null- Parameters:
c- the main frame's contentPane child- See Also:
-
show
Initialize and show the secondary JFrame.This method is intended for showing "secondary" windows, like message dialogs, about boxes, and so on. Unlike the
mainFrame, dismissing a secondary window will not exit the application.Session state is only automatically saved if the specified JFrame has a name, and then only for component descendants that are named.
Throws an IllegalArgumentException if
cis null- See Also:
-
shutdown
protected void shutdown()Save session state for the component hierarchy rooted by the mainFrame. SingleFrameApplication subclasses that override shutdown need to remember callsuper.shutdown().- Overrides:
shutdownin classApplication- See Also:
-
getMainView
-
show
- Overrides:
showin classApplication
-