<< Chapter < Page | Chapter >> Page > |
In Java Graphical User Interface ( GUI ) programming, we do not build GUI components from scratch. Instead we use GUI components provided to us by the JDK. Java has two types of GUI applications: stand-alone GUI applications and applets . We first study how to build stand-alone GUI applications (GUI app for short).
Every GUI app uses what is called a
JFrame
that comes with the JDK. A
JFrame
is a window with borders, a title bar, and buttons for closing and maximizing or minimizing itself. It also knows how to resize itself. Every GUI app subclasses
JFrame
in some way to add more functionality to the window frame. One common task is to tell the system to terminate all "threads" of the GUI app when the user clicks on the exit (close) button of the main GUI window. We encapsulate this task in an abstract frame class called
AFrame
described below.
AFrame
is available at the end of this section.When the user interacts with a GUI component such as clicking on it or holding the mouse down on it and drag the mouse around, the Java Virtual Machine (JVM) fires appropriate "events" and delivers them to the GUI component. It is up to the GUI component to respond to an event. The abstract notion of events is encapsulated in an abstract class called
AWTEvent
provided by Java. Specific concrete events are represented by appropriate concrete subclasses of
AWTEvent
.
For example, when the user clicks on the close button of a
JFrame
, the JVM fires a window event represented by the class
WindowEvent
and delivers it to the
JFrame
. By default, the
JFrame
simply hides itself from the screen while everything else that was created and running before the
JFrame
disappears from the screen is still alive and running! There is no way the user can redisplay the frame again. In the case when the
JFrame
is the main window of a GUI app, we should terminate everything when this main frame is closed. The best way to ensure this action is to "register" a special window event "listener" with the
JFrame
that will call the System class to terminate all threads related to the current program and exit the program. The code looks something like this:
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);
}});
Every time we write the constructor for a main frame of a GUI app, we
invariably find ourselves writing the above lines of code to exit the program plus some additional application specific code to initialize the frame. So, instead of "copy-and-paste" the above code ("opportunistic" re-use), we capture this
invariant task in the constructor of an abstract class called
AFrame
and reuse the code by subclassing from it. The application specific code to initialize the main frame is relegated to the specific concrete subclass of
AFrame
and is represented by an abstract method called
initialize()
. The constructor for
AFrame
calls
initialize()
, which, at run-time, is the concrete initialization code of the concrete subclass of
AFrame
that is being instantiated, as shown below.
Notification Switch
Would you like to follow the 'Principles of object-oriented programming' conversation and receive update notifications?