Button3
File: java/Button3/Main.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
/**
* Main program for Button3
*/
public class Main extends JFrame {
/** The squares */
private Square square1, square2;
public static void main (String [] args) {
new Main ();
}
public Main () {
// Window setup
setSize (500, 500);
Container content = getContentPane();
content.setLayout (new BorderLayout());
setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
// Our canvas
MyCanvas canvas = new MyCanvas (this);
content.add (canvas, BorderLayout.CENTER);
/*
* Now create the square and its associated buttons
*/
square1 = new Square (canvas);
// Control panel for the square
JPanel controls1 = new JPanel ();
controls1.setBorder (new LineBorder(Color.blue));
controls1.setLayout (new FlowLayout());
// Create our buttons by instantiating them
// turns out we don't need to remember them,
// just to add() them to panel layout
controls1.add (new ButtonLeft (square1));
controls1.add (new ButtonRight (square1));
controls1.add (new ButtonBigger (square1));
controls1.add (new ButtonSmaller (square1));
controls1.add (new ButtonFill (square1));
/*
* Another square
*/
square2 = new Square (canvas);
JPanel controls2 = new JPanel ();
controls2.setBorder (new LineBorder(Color.blue));
controls2.setLayout (new FlowLayout());
// Create our buttons
controls2.add (new ButtonLeft (square2));
controls2.add (new ButtonRight (square2));
controls2.add (new ButtonBigger (square2));
controls2.add (new ButtonSmaller (square2));
controls2.add (new ButtonFill (square2));
// Need a grid container to hold our 2 panels
JPanel controls = new JPanel ();
controls.setLayout (new GridLayout(2, 1));
controls.add (controls1);
controls.add (controls2);
content.add (controls, BorderLayout.SOUTH);
setVisible (true);
}
public void drawSquares (Graphics g) {
// For each square (this could be an array)
square1.draw (g);
square2.draw (g);
}
}
File: java/Button3/MyCanvas.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
/**
* Canvas object
*/
public class MyCanvas extends JComponent implements MouseListener {
private Main parent;
public MyCanvas (Main parent) {
this.parent = parent;
setBorder (new LineBorder(Color.blue));
addMouseListener (this);
}
/** Tell parent to do the job */
public void paintComponent (Graphics g) {
parent.drawSquares (g);
}
/** MouseListener callbacks */
public void mousePressed (MouseEvent event) {
System.out.println ("Mouse down at " + event.getPoint().x + ", " + event.getPoint().y);
}
public void mouseClicked (MouseEvent event) {}
public void mouseReleased (MouseEvent event) {}
public void mouseEntered (MouseEvent event) {}
public void mouseExited (MouseEvent event) {}
}
File: java/Button3/Square.java
import java.awt.*;
/**
* Square holds the "application" data for one square
*/
public class Square {
private MyCanvas canvas;
private Rectangle loc = new Rectangle (100, 50, 50, 50);
private boolean filled = false;
public Square (MyCanvas canvas) {
this.canvas = canvas;
}
public void draw (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (filled) g2.fill (loc);
else g2.draw (loc);
}
public void left () {
loc.x -= 10;
canvas.repaint();
}
public void right () {
loc.x += 10;
canvas.repaint();
}
public void bigger () {
loc.width += 10;
loc.height += 10;
canvas.repaint();
}
public void smaller () {
loc.width -= 10;
loc.height -= 10;
canvas.repaint();
}
public void setFill (boolean newfill) {
filled = newfill;
canvas.repaint();
}
}
File: java/Button3/ButtonLeft.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonLeft extends JButton implements ActionListener {
private Square square;
public ButtonLeft (Square square) {
this.square = square;
setIcon (new ImageIcon ("leftArrow.gif"));
addActionListener (this);
}
public void actionPerformed (ActionEvent e) {
square.left();
}
}
File: java/Button3/ButtonRight.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonRight extends JButton implements ActionListener {
private Square square;
public ButtonRight (Square square) {
this.square = square;
setIcon (new ImageIcon ("rightArrow.gif"));
addActionListener (this);
}
public void actionPerformed(ActionEvent e) {
square.right();
}
}
File: java/Button3/ButtonBigger.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonBigger extends JButton implements ActionListener {
private Square square;
public ButtonBigger (Square square) {
this.square = square;
setText ("Bigger");
addActionListener (this);
}
public void actionPerformed(ActionEvent e) {
square.bigger();
}
}
File: java/Button3/ButtonSmaller.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonSmaller extends JButton implements ActionListener {
private Square square;
public ButtonSmaller (Square square) {
this.square = square;
setText ("Smaller");
addActionListener (this);
}
public void actionPerformed(ActionEvent e) {
square.smaller();
}
}
File: java/Button3/ButtonFill.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonFill extends JButton implements ActionListener {
private Square square;
private boolean buttonState = false;
public ButtonFill (Square square) {
this.square = square;
setText ("Filled");
addActionListener (this);
}
public void actionPerformed (ActionEvent e) {
buttonState = ! buttonState;
square.setFill (buttonState);
// Also update button label
if (buttonState) setText ("Empty");
else setText ("Filled");
}
}