• Containers and components . A container is an instance of a class that can con-
tain components (like buttons and text fields). A component is an instance of a
class that can be placed in a container. Panel , JPanel , and Box are examples of
components that are themselves containers. Using these three, one can nest com-
ponents to any level.
• Basic components . The basic components are labels, buttons, text fields, text
areas, checkboxes, radio buttons, combo boxes, lists, and sliders.
• Layout managers . A layout manager for a container is an instance of a class
that takes care of “laying out” the components that have been added to the con-
tainer. Each container has a layout manager associated with it. Each different
kind of layout manager uses different rules for laying out the components. The
primary layout-manager classes are BorderLayout , FlowLayout , and
BoxLayout , but there are others.
• Graphics . An instance of container class JPanel has a method paint , which
can be used to draw on the panel using methods of class Graphics .
• Listening to a GUI . In order to listen to an event like a mouse click, a click of
a button, or the press of the enter/return key in a text field, an instance of a class
that implements ActionListener has to be registered with the component on
which the event takes place. The instance of the class needs a method action-
Performed , which processes the event.
• Dialog windows . Class JOptionPane has several methods that make it easy to
display a modal window on the monitor, wait for the user to close it, and then
retrieve the user's response.
• Lightweight versus heavyweight . Top-level windows are heavyweight —they
have associated “peers”, written in machine language, that do all the window
drawing. Components can be heavyweight or lightweight , which means that they
do not have such peers. All the awt components are heavyweight, but the swing
components are lightweight. Mixing lightweight and heavyweight components
may lead to inconsistencies and unwanted behavior in a window. So that this
does not happen, try to use all swing components, or all awt components.
Exercises for Chapter 17
E1. Write (and test) a subclass of JFrame that has two components:
• in the west, a JLabel that contains “waist size:”;
• in the east, a JTextField with initial value “34 inches”.
E2. Same as exercise E1, but right-adjust the label —see Sec. 17.2.2. Drag the
window to make it wider to see what happens to the label.
E3. Like exercise E1, but make the text field uneditable.