In this lab, we will explore using the Java Swing GUI toolkit, which offers a highly stateful set of classes and methods.
Create a new project and a new class called PhoneBook. Use the following code, and run it:
import javax.swing.*;
public class PhoneBook {
public static void main(String[] args) {
JFrame frame = new JFrame("White Pages");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Phone number...");
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
}
}This program does not use the tester library. Instead, it defines a starting point in the normal Java way: by defining a static method (i.e., a function) called main.
What happens if you add
JFrame frame2 = frame;
after the declaration of frame and change frame.getContentPane().add(label) to frame2.getContentPane().add(label)?
What happens if, instead of JFrame frame2 = frame;, you add the declaration
JFrame frame2 = new JFrame("Other White Pages");?
After you experiment, get rid of frame.
To add multiple labels to a frame, you need to create a Panel and add that to the frame instead. Then, you can add multiple labels to the Panel.
Try this program:
import javax.swing.*;
public class PhoneBook {
public static void main(String[] args) {
JFrame frame = new JFrame("White Pages");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.getContentPane().add(panel);
JLabel nameLabel = new JLabel("Name...");
panel.add(nameLabel);
JLabel numberLabel = new JLabel("Phone number...");
panel.add(numberLabel);
frame.pack();
frame.setVisible(true);
}
}By default, Panel arranges the things that you add to it left-to-right (until it runs out of space). To have a panel arrange items in a different way, you have to set its layout.
Add
import java.awt.*;
to the beginning of your program, and then set the panel’s layout before packing the frame:
panel.setLayout(new GridLayout(2, 1, 0, 0));
The 2 means two lines, and 1 means one column per line. The 0s indicate extra space to put between the rows and columns.
Create a button by allocating an instance of the JButton class:
JButton button = new JButton("Lookup");Add it to your panel on its own line, below the two labels.
To handle a button click, you add a listener to the button. A listener is an instance of a class that implements the ActionListener interface as exported by java.awt.event.*.
Here’s a listener class that sets a label string in response to a button click:
class Lookup implements ActionListener {
JLabel numberLabel;
Lookup(JLabel numberLabel) {
this.numberLabel = numberLabel;
}
public void actionPerformed(ActionEvent e) {
numberLabel.setText("555-1212");
}
}Connect Lookup to button like this:
button.addActionListener(new Lookup(numberLabel));
Use new JTextField() to create a text field, and substitute it in place of nameLabel.
Change Lookup so that it uses the name in the name field to set numberLabel to “no number for <name>.”
| Last update: Thursday, November 10th, 2011mflatt@cs.utah.edu |