Java Reference
In-Depth Information
To do this, you would put the two components in a panel and then place the panel in
the
BorderLayout.SOUTH
position.
You can give different layout managers to a
JFrame
and to each panel in the
JFrame
.
Because you can add panels to other panels and each panel can have its own layout
manager, this enables you to produce almost any kind of overall layout of the items in
your GUI.
For example, if you want to place two buttons at the bottom of your
JFrame
GUI,
you might add the following to the constructor of your
JFrame
GUI:
setLayout(
new
BorderLayout());
JPanel buttonPanel =
new
JPanel();
buttonPanel.setLayout(
new
FlowLayout());
JButton firstButton =
new
JButton("One");
buttonPanel.add(firstButton);
JButton secondButton =
new
JButton("Two");
buttonPanel.add(secondButton);
add(buttonPanel, BorderLayout.SOUTH);
The next Programming Example makes use of panels within panels.
EXAMPLE:
A Tricolor Built with Panels
When first run, the GUI defined in Display 17.11 looks as shown in the first view. The
entire background is light gray, and there are three buttons at the bottom of the GUI
labeled
"Green"
,
"White"
, and
"Gray"
. If you click any one of the buttons, a vertical
stripe with the color written on the button appears. You can click the buttons in any
order. In the last three views in Display 17.11 we show what happens if you click the
buttons in left-to-right order.
The green, white, and gray stripes are the
JPanel
s named
greenPanel
,
whitePanel
,
and
grayPanel
. At first the panels are not visible because they are all light gray, so no
borders are visible. When you click a button, the corresponding panel changes color
and so is clearly visible.
Notice how the action listeners are set up. Each button registers the
this
parameter
as a listener, as in the following line:
redButton.addActionListener(
this
);
Because this line appears inside of the constructor for the class
PanelDemo
, the
this
parameter refers to
PanelDemo
, which is the entire GUI. Thus, the entire
JFrame
(the
entire GUI) is the listener, not the
JPanel
. So when you click one of the buttons, it is
the
actionPerformed
method in
PanelDemo
that is executed.