// File: Blob3.java
// T Balls : March 1998
// Paint filled ovals on screen
// in response to mouse events
// Modified version of Blob1.java
// Model: a Vector of Blob objects :added
// Colour selection via a Choice object added
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Blob3 extends Frame
{ public static void main( String[] args )
{ new Blob3();
}
public Blob3()
{ setTitle( "Blob3" );
setSize( 300, 300 );
picture = new Picture();
Panel controls = new Panel();
controls.setLayout( new FlowLayout( FlowLayout.LEFT ) );
Choice colours = new Choice();
colours.addItem( "Red" );
colours.addItem( "Blue" );
colours.addItem( "Green" );
// and so on !
colours.addItemListener( new ItemListener() {
public void itemStateChanged( ItemEvent e )
{ picture.setColour( (String)(e.getItem()) );
}
});
controls.add( colours );
add( "North", controls );
addMouseListener( new MouseAdapter() {
public void mousePressed( MouseEvent e )
{ picture.addBlob( e.getX(), e.getY() );
repaint();
}
});
addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e )
{ System.exit(0);
}
});
setVisible( true );
}
private Picture picture;
public void paint( Graphics g )
{ picture.paint( g );
}
public void update( Graphics g )
{ paint( g );
}
}
class Blob
{ public Blob( int x, int y, Color c )
{ this.x = x;
this.y = y;
this.c = c;
}
private int x;
private int y;
private Color c;
public void paint( Graphics g )
{ g.setColor( c );
g.fillOval( x, y, 10, 10 );
}
}
class Picture
{ public Picture()
{ blobs = new Vector();
}
private Vector blobs;
private Color c = Color.red;
public void setColour( String colour )
{ if( colour.equals( "Red" ) )
{ c = Color.red;
}
if( colour.equals( "Blue" ) )
{ c = Color.blue;
}
if( colour.equals( "Green" ) )
{ c = Color.green;
}
}
public void addBlob( int x, int y )
{ blobs.addElement( new Blob( x, y, c ) );
}
public void paint( Graphics g )
{ for( int i = 0; i < blobs.size(); i ++ )
{ ((Blob)(blobs.elementAt(i))).paint(g);
}
}
} |