// ShapesWindow2.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
// Uses ActionListener classes defined in:
// FileOpener.java
// Quitter.java
// AdderOfOneEnteredShape.java
public class ShapesWindow2 extends JFrame
{
// To store ShapeOutline data:
private ShapeBoundedBuffer shapes;
// Menu items:
private JMenuItem mOpen;
private JMenuItem mQuit;
private JMenuItem mAdd;
// Displayed regions of the window:
private JTextField messageField;
private JTextArea shapesTextArea;
private ShapesPanel shapesDisplay;
public ShapesWindow2()
{
shapes = new ShapeBoundedBuffer(5);
// Create menu items for the "File" menu:
mOpen = new JMenuItem ("Open");
mQuit = new JMenuItem ("Quit");
// Create "File" menu:
JMenu fileMenu = new JMenu ("File", /*tearoff =*/ false);
fileMenu.add(mOpen);
fileMenu.addSeparator();
fileMenu.add(mQuit);
// Create menu items for the "Edit" menu:
mAdd = new JMenuItem ("Add");
// Create "Edit" menu:
JMenu editMenu = new JMenu ("Edit", /*tearoff =*/ false);
editMenu.add(mAdd);
// Create menu bar:
JMenuBar mainMenuBar = new JMenuBar();
mainMenuBar.add(fileMenu);
mainMenuBar.add(editMenu);
// Put menu bar on this window:
setJMenuBar(mainMenuBar);
// Enable this window to respond when menu items are clicked:
mOpen.addActionListener(new FileOpener(this, shapes));
mQuit.addActionListener(new Quitter());
mAdd.addActionListener(new AdderOfOneEnteredShape(this,
shapes));
// mAdd.addActionListener(new AdderOfOneEnteredShape2(this,
// shapes));
// Note that mAdd should have only one ActionListener.
// Exactly one of the above addActionListener statements
// for mAdd should be uncommented.
// Components to display on window:
messageField = new JTextField();
messageField.setEditable(false);
shapesTextArea = new JTextArea();
shapesTextArea.setEditable(false);
shapesDisplay = new ShapesPanel(shapes);
// Arrange components on window:
Container contentPane = getContentPane();
contentPane.add(messageField, BorderLayout.SOUTH);
JPanel centerPanel = new JPanel();
contentPane.add(centerPanel, BorderLayout.CENTER);
centerPanel.setLayout(new GridLayout(2,1));
centerPanel.add(shapesDisplay);
centerPanel.add(new JScrollPane(shapesTextArea));
// Routine necessities with JFrame windows:
setSize(600, 400);
setLocation(100, 50);
setTitle("Interactive GUI example");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
} // constructor
void updateDisplay()
{
String lineBreak = System.getProperty("line.separator");
shapesTextArea.setText("");
for ( int i = 0; i < shapes.getLengthFilled(); i++ )
shapesTextArea.append(shapes.getShapeAt(i) + lineBreak);
messageField.setText("Created so far: "
+ RightTriangle.getCount()
+ " right triangles, "
+ Wheel.getCount() + " wheels, "
+ (Circle.getCount() - Wheel.getCount())
+ " non-wheel circles, "
+ ShapeOutline.getCount()
+ " shapes total.");
repaint(); // to force shapes display panel to update
} // method updateDisplay;
public static void main(String[] args)
{
new ShapesWindow2();
} // method main
} // class ShapesWindow2