Layout Managers and GUI Construction - con't
When a layout manager's layoutContainer() method is called,
it is passed a reference to the container for which components should
be arranged. The layout manager obtains the list of child components by
calling the container's getComponents() method and sets the
size and location for each visible child using Component
methods such as setSize(), setLocation(), and
setBounds(). If the layout manager supports constraints, it
will use them to determine each component's size and location, but if it
does not, it will arrange the components based on the order in which they
occured in the list returned by getComponents().
To determine what a component's size should be, the layout manager usually
also considers the container's size and may call each component's
getPreferredSize(), getMinimumSize(), or
getMaximumSize() methods. However, the layout manager is not
required to respect the values returned by those methods, and in some
cases, Java's layout managers do ignore them.
Each container has inset values that indicate the number of pixels around
the container's edges that are reserved and cannot be used to display child
components. Those values are encapsulated by an instance of
java.awt.Insets, which defines four int values,
each corresponding to one side of the container: top,
left, bottom, and right. Those
values usually describe the width of the border on the sides of the
container, but in some cases, there may be additional space reserved. For
example, JDialog and JFrame both include a title
bar along their top edges, and that space is reserved by setting the
top inset value appropriately.
When a layout manager calculates the amount of space available in a
container, it subtracts the container's left and right insets from its
width and the top and bottom insets from the height. In addition, when the
layout manager arranges the child components, it will position them inside
the container's inset area so that none of the components overlay the
reserved portion of space around the container's edges.
Java's Layout Managers
It's possible to create your own layout manager class and this chapter
describes how to do so, but the Java core classes include a number of
layout managers that are flexible enough to meet the needs of most
applications. The following list identifies the layout manager classes that
are provided with Java, which are listed in what is arguably their order of
complexity starting with the least complex and ending with the most
complicated one:
CardLayout
FlowLayout
GridLayout
BorderLayout
GridBagLayout
BoxLayout (Java 2)
When you create an instance of a Container subclass that's
provided with Java (for example, JPanel, JFrame,
JDialog, etc.), that object will automatically be assigned a
layout manager. The following table lists some of the classes that you
might use and identifies the default layout manager type for each one:
| Component | Default Layout Manager |
JPanel | FlowLayout |
JFrame (content pane) | BorderLayout |
JDialog (content pane) | BorderLayout |
JApplet (content pane) | BorderLayout |
Box | BoxLayout |
This chapter examines the capabilities of the layout managers that are
provided with Java, and specifically examines the following characteristics
of each one:
- How a layout manager instance is constructed.
- The constraints that can be specified when adding a child component.
- How each child component's size is calculated.
- How each child component's position is calculated.
- What happens when the container has more or less space than it needs to display its child
components. The emphasis here is on what happens when the container has less space than it
needs, since that's usually when problems occur.
- How the values returned by a container's
getMinimumSize(), getPreferredSize(), and
getMaximumSize() methods are calculated by the layout manager.
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|