|
The following applets demonstrate five more tools
for arranging components. Follow the links in the resources
section for more information and details on these classes.
BoxLayout
BoxLayout
arranges components sequentially like the FlowLayout
manager but it will set them either horizontally or vertically
as instructed. Unlike FlowLayout,
however, it will not continue the components on the next
line or column when there is insufficient room. Components
out of range will not be shown.
|
BoxLayoutApplet.java
|
import
javax.swing.*;
import java.awt.*;
/** Demo
of BoxLayout **/
public class BoxLayoutApplet extends JApplet
{
public void init () {
Container content_pane = getContentPane
();
// Create an instance of BoxPanel
that uses a
// a Box for layout.
BoxPanel box_panel = new BoxPanel
();
// And add one or more panels to
the JApplet panel.
content_pane.add (box_panel);
} //init
} // class BoxLayoutApplet
/** Arrange
five buttons using a BoxLayout. **/
class BoxPanel extends JPanel
{
BoxPanel () {
setLayout (new BoxLayout (this,BoxLayout.Y_AXIS));
add (new JButton ("One") );
add (new JButton ("Two") );
add (new JButton ("Three") );
add (new JButton ("Four") );
add (new JButton ("Five") );
} // ctor
} // class BoxPanel
|
Box Container
The Box
is a container like JPanel
except that it uses BoxLayout
as a default instead of the FlowLayout
used by JPanel.
In addition, Box
provides for three special invisible elements that insert
spacing between components. You can create a Box
object with its constructor or you can use two static
methods to produce Box
instances with either horizontal or vertical alignment:
Box
horizontalBox = Box.createHorizontalBox();
Box verticalBox = Box.createVerticalBox();
|
BoxApplet.java
|
import
javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
/** Demo of using a Box to alayout the components.
**/
public class BoxApplet extends JApplet
{
public void init () {
Container content_pane = getContentPane
();
// Create a Box with horizontal
alignment
Box box = Box.createHorizontalBox
();
// Add the components to the Box
box.add (new JButton ("One") );
box.add (new JButton ("Two") );
box.add (new JButton ("Three") );
box.add (new JButton ("Four") );
box.add (new JButton ("Five") );
// And add the Box to the JApplet
panel.
content_pane.add (box);
} // init
} // class BoxApplet
|
Box
Container with Glue & Struts
A Box
also provides the following elements to specify the spacing
between components:
-
Glue
- surplus space placed in between components or between
a component and its container's side
-
Strut
- a fixed width or height spacing for horizontal or
vertical alignments
-
RigidArea
- both width and height dimensions are fixed values
|
BoxSpacingApplet.java
|
import
javax.swing.*;
import java.awt.*;
/**
Demo of Box with glue and struts. **/
public class BoxSpacingApplet extends JApplet
{
public void init () {
Container content_pane = getContentPane
();
// Create a Box with horizontal
alignment.
Box box = Box.createHorizontalBox
();
// Add the buttons plus spacing
components.
box.add (Box.createHorizontalGlue
());
box.add (new JButton ("One") );
box.add (Box.createHorizontalStrut
(5));
box.add (new JButton ("Two") );
box.add (Box.createHorizontalStrut
(5));
box.add (new JButton ("Three") );
box.add (Box.createHorizontalGlue
());
box.add (new JButton ("Four") );
box.add (Box.createHorizontalGlue
());
box.add (new JButton ("Five") );
box.add (Box.createHorizontalGlue
());
// And add box to the Applet's panel.
content_pane.add (box);
} // init
} // class BoxSpacingApplet
|
CardLayout
The CardLayout
arranges components into a "vertical" stack where only
the top component is visible at a given time. Use next()
method to move to next underlying component
|
CardApplet.java
|
import
javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/** Demo of the CardLayout manager. **/
public class CardApplet extends JApplet
{
public void init () {
Container content_pane = getContentPane
();
// Create an instance of CardPanel
CardPanel card_panel = new CardPanel
();
// And add the CardPanel to the
applet's panel.
content_pane.add (card_panel);
} // init
} // class CardApplet
/** Stack three buttons using CardLayout. **/
class CardPanel extends JPanel
implements ActionListener
{
CardLayout fCards;
/** Constructor adds three buttons to the panel
* and uses CardLayout.
**/
CardPanel () {
fCards = new CardLayout ();
setLayout (fCards);
add ("one", makeButton
("one") );
add ("two", makeButton
("two") );
add ("three", makeButton ("three")
);
} // ctor
/** Create a JButton and add this object
* to its action listeners.
**/
JButton makeButton ( String name) {
JButton b = new JButton ( name );
b.addActionListener ( this );
return b;
} // makeButton
/** Flip to the next card when a button pushed.
**/
public void actionPerformed (ActionEvent e)
{
fCards.next ( this);
} // actionPerformed
} // class CardPanel
|
JTabbedPane
The JTabbedPane
is a component rather than a layout manager but it provides
an alternative to CardLayout
for overlaying a set of components. It provides a set
of tabbed pages in which each page can hold a component.
Selecting the tab for a particular page will bring that
page to the top. Using a container such as JPanel
can, of course, hold many sub-components for a page.
|
TabbedApplet.java
|
import
javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/** Demo of the JTablePane component. **/
public class TabbedApplet extends JApplet
{
public void init () {
Container content_pane = getContentPane
();
// Create an instance of our Tabs
class.
Tabs tabs = new Tabs (this);
// And add it to the applet's panel.
content_pane.add (tabs);
} // init
} // class TabbedApplet
/** This JTabbedPane subclass holds three panes, each
* with one button.
**/
class Tabs extends JTabbedPane
implements ActionListener {
JApplet fApplet;
/** Put a button on each of three pages. **/
Tabs (JApplet applet) {
fApplet = applet;
add (makeButton ("1"), "One" );
add (makeButton ("2"), "Two" );
add (makeButton ("3"), "Three" );
} // ctor
/** Make a button here and add this object
* to its action listeners list.
**/
JButton makeButton ( String name) {
JButton b = new JButton ( name );
b.addActionListener ( this );
return b;
} // makeButton
/** When button pushed, show message on the
browser status bar.**/
public void actionPerformed ( ActionEvent e) {
JButton but = (JButton)
(e.getSource ());
String str = but.getText ();
fApplet.showStatus ("Pushed button
"+ str);
} // actionPerformed
} // class Tabs
|
References
& Web Resources
Latest update: Nov. 3, 2004
|
|
|