/* * File: TextAndGraphics.java * -------------------------- * This program shows an example of using text and two different * graphics canvases in a ConsoleProgram */ import acm.program.*; import acm.graphics.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TextAndGraphics extends ConsoleProgram { public void init() { setLayout(new GridLayout(1, 3)); // Note: console is first element of our layout leftCanvas = new GCanvas(); add(leftCanvas); rightCanvas = new GCanvas(); add(rightCanvas); textField = new JTextField(10); add(new JLabel("Text"), SOUTH); add(textField, SOUTH); textField.addActionListener(this); add(new JButton("Draw left"), SOUTH); add(new JButton("Draw right"), SOUTH); addActionListeners(); } public void actionPerformed(ActionEvent e) { if (e.getSource() == textField) { println("You typed: " + textField.getText()); } String cmd = e.getActionCommand(); if (cmd.equals("Draw left")) { leftCanvas.add(createFilledRect(), 0, leftY); leftY += SPACER; } else if (cmd.equals("Draw right")) { rightCanvas.add(createFilledRect(), 0, rightY); rightY += SPACER; } } private GRect createFilledRect() { GRect rect = new GRect(WIDTH, HEIGHT); rect.setFilled(true); return rect; } /* Constants */ private static final double WIDTH = 50; private static final double HEIGHT = 20; private static final double SPACER = 30; /* Private instance variables */ private GCanvas leftCanvas; private GCanvas rightCanvas; private JTextField textField; private double leftY = 0; private double rightY = 0; }