Lesson Two - AllComponentsApplet
This applet is borrowed from Java in a Nutshell. I have
modified it to pop up in it's own top-level
java.awt.Frame
. In this example, none of the widgets do
anything. The next lesson will add actions to the widgets.
The APPLET
Tag
The HTML Appplet tag is:
<APPLET code="AllComponentsApplet.class" width=1 height=1></APPLET>
Program Listing
The java program is divided between two classes
The Applet
// this applet was written by Jeffrey Juliano (jjuliano@cs.buffalo.edu)
import java.applet.Applet;
import java.awt.Frame;
public class AllComponentsApplet extends Applet
{
protected AllComponents components;
public void init()
{
// AllComponents is derrived from java.awt.Frame
// instantiating it will have the result of creating a new
// top-level window that will be decorated by the window manager
components = new AllComponents ("Component Demo");
}
// the start method is called when the web browser enters the web page
public void start()
{
// size the frame and make it appear
components.resize (450,475);
components.show ();
}
// the start method is called when the web browser leaves the web page
public void stop()
{
// make the frame disappear
components.hide();
}
}
AllComponents -- derrived from java.awt.Frame
// This example was modified by Jeffrey Juliano (jjuliano@cs.buffalo.edu)
// to derrive from Frame instead of Applet.
//
// This example is from the book _Java in a Nutshell_ by David Flanagan.
// Written by David Flanagan. Copyright (c) 1996 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or implied.
import java.awt.*;
public class AllComponents extends Frame {
MenuBar menubar; // the menubar
Menu file, help; // menu panes
Button okay, cancel; // buttons
List list; // A list of choices
Choice choice; // A menu of choices
CheckboxGroup checkbox_group; // A group of button choices
Checkbox[] checkboxes; // the buttons to choose from
TextField textfield; // One line of text input
TextArea textarea; // A text window
ScrollableScribble scribble; // An area to draw in.
FileDialog file_dialog;
Panel panel1, panel2 ; // Sub-containers for all this stuff.
Panel buttonpanel;
// The layout manager for each of the containers.
GridBagLayout gridbag = new GridBagLayout();
public AllComponents(String title) {
super(title);
// Create the menubar. Tell the frame about it.
menubar = new MenuBar();
this.setMenuBar(menubar);
// Create the file menu. Add two items to it. Add to menubar.
file = new Menu("File");
file.add(new MenuItem("Open"));
file.add(new MenuItem("Quit"));
menubar.add(file);
// Create Help menu; add an item; add to menubar
help = new Menu("Help");
help.add(new MenuItem("About"));
menubar.add(help);
// Display the help menu in a special reserved place.
menubar.setHelpMenu(help);
// Create pushbuttons
okay = new Button("Okay");
cancel = new Button("Cancel");
// Create a menu of choices
choice = new Choice();
choice.addItem("red");
choice.addItem("green");
choice.addItem("blue");
// Create checkboxes, and group them.
checkbox_group = new CheckboxGroup();
checkboxes = new Checkbox[3];
checkboxes[0] = new Checkbox("vanilla", checkbox_group, false);
checkboxes[1] = new Checkbox("chocolate", checkbox_group, true);
checkboxes[2] = new Checkbox("strawberry", checkbox_group, false);
// Create a list of choices.
list = new List(4, true);
list.addItem("Java"); list.addItem("C"); list.addItem("C++");
list.addItem("Smalltalk"); list.addItem("Lisp");
list.addItem("Modula-3"); list.addItem("Forth");
// Create a one-line text field, and multi-line text area.
textfield = new TextField(15);
textarea = new TextArea(6, 40);
textarea.setEditable(false);
// Create a scrolling canvas to scribble in.
scribble = new ScrollableScribble();
// Create a file selection dialog box
file_dialog = new FileDialog(this, "Open File", FileDialog.LOAD);
// Create a Panel to contain all the components along the
// left hand side of the window. Use a GridBagLayout for it.
panel1 = new Panel();
panel1.setLayout(gridbag);
// Use several versions of the constrain() convenience method
// to add components to the panel and to specify their
// GridBagConstraints values.
constrain(panel1, new Label("Name:"), 0, 0, 1, 1);
constrain(panel1, textfield, 0, 1, 1, 1);
constrain(panel1, new Label("Favorite color:"), 0, 2, 1, 1,
10, 0, 0, 0);
constrain(panel1, choice, 0, 3, 1, 1);
constrain(panel1, new Label("Favorite flavor:"), 0, 4, 1, 1,
10, 0, 0, 0);
constrain(panel1, checkboxes[0], 0, 5, 1, 1);
constrain(panel1, checkboxes[1], 0, 6, 1, 1);
constrain(panel1, checkboxes[2], 0, 7, 1, 1);
constrain(panel1, new Label("Favorite languages:"), 0, 8, 1, 1,
10, 0, 0, 0);
constrain(panel1, list, 0, 9, 1, 3, GridBagConstraints.VERTICAL,
GridBagConstraints.NORTHWEST, 0.0, 1.0, 0, 0, 0, 0);
// Create a panel for the items along the right side.
// Use a GridBagLayout, and arrange items with constrain(), as above.
panel2 = new Panel();
panel2.setLayout(gridbag);
constrain(panel2, new Label("Messages"), 0, 0, 1, 1);
constrain(panel2, textarea, 0, 1, 1, 3, GridBagConstraints.HORIZONTAL,
GridBagConstraints.NORTH, 1.0, 0.0, 0, 0, 0, 0);
constrain(panel2, new Label("Diagram"), 0, 4, 1, 1, 10, 0, 0, 0);
constrain(panel2, scribble, 0, 5, 1, 5, GridBagConstraints.BOTH,
GridBagConstraints.CENTER, 1.0, 1.0, 0, 0, 0, 0);
// Do the same for the buttons along the bottom.
buttonpanel = new Panel();
buttonpanel.setLayout(new FlowLayout());
buttonpanel.setLayout(gridbag);
constrain(buttonpanel, okay, 0, 0, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.CENTER, 0.3, 0.0, 0, 0, 0, 0);
constrain(buttonpanel, cancel, 1, 0, 1, 1, GridBagConstraints.NONE,
GridBagConstraints.CENTER, 0.3, 0.0, 0, 0, 0, 0);
// Finally, use a GridBagLayout to arrange the panels themselves
this.setLayout(gridbag);
// And add the panels to the toplevel window
constrain(this, panel1, 0, 0, 1, 1, GridBagConstraints.VERTICAL,
GridBagConstraints.NORTHWEST, 0.0, 1.0, 10, 10, 5, 5);
constrain(this, panel2, 1, 0, 1, 1, GridBagConstraints.BOTH,
GridBagConstraints.CENTER, 1.0, 1.0, 10, 10, 5, 10);
constrain(this, buttonpanel, 0, 1, 2, 1, GridBagConstraints.HORIZONTAL,
GridBagConstraints.CENTER, 1.0, 0.0, 5, 0, 0, 0);
}
public void constrain(Container container, Component component,
int grid_x, int grid_y, int grid_width, int grid_height,
int fill, int anchor, double weight_x, double weight_y,
int top, int left, int bottom, int right)
{
GridBagConstraints c = new GridBagConstraints();
c.gridx = grid_x; c.gridy = grid_y;
c.gridwidth = grid_width; c.gridheight = grid_height;
c.fill = fill; c.anchor = anchor;
c.weightx = weight_x; c.weighty = weight_y;
if (top+bottom+left+right > 0)
c.insets = new Insets(top, left, bottom, right);
((GridBagLayout)container.getLayout()).setConstraints(component, c);
container.add(component);
}
public void constrain(Container container, Component component,
int grid_x, int grid_y, int grid_width, int grid_height) {
constrain(container, component, grid_x, grid_y,
grid_width, grid_height, GridBagConstraints.NONE,
GridBagConstraints.NORTHWEST, 0.0, 0.0, 0, 0, 0, 0);
}
public void constrain(Container container, Component component,
int grid_x, int grid_y, int grid_width, int grid_height,
int top, int left, int bottom, int right) {
constrain(container, component, grid_x, grid_y,
grid_width, grid_height, GridBagConstraints.NONE,
GridBagConstraints.NORTHWEST,
0.0, 0.0, top, left, bottom, right);
}
// this method allows the applet to be invoded at the command line
// as a standalone application by typing "java AllComponents"
public static void main(String[] args) {
Frame f = new AllComponents("AWT Demo");
// We should call f.pack() here. But its buggy.
f.resize(450, 475);
f.show();
}
}