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 |