150 lines
3.5 KiB
Java
150 lines
3.5 KiB
Java
|
Draw random lines, rectangles and ovals
|
||
|
|
||
|
import java.awt.*;
|
||
|
import java.awt.event.*;
|
||
|
import javax.swing.*;
|
||
|
|
||
|
public class DrawShapes extends JApplet
|
||
|
{
|
||
|
private JButton choices[];
|
||
|
private String names[] = { "Line", "Rectangle", "Oval" };
|
||
|
private JPanel buttonPanel;
|
||
|
private DrawPanel drawingArea;
|
||
|
private int width = 300, height = 200;
|
||
|
|
||
|
public void init()
|
||
|
{
|
||
|
drawingArea = new DrawPanel( width, height );
|
||
|
|
||
|
choices = new JButton[ names.length ];
|
||
|
buttonPanel = new JPanel();
|
||
|
buttonPanel.setLayout( new GridLayout( 1, choices.length ) );
|
||
|
ButtonHandler handler = new ButtonHandler();
|
||
|
|
||
|
for ( int i = 0; i < choices.length; i++ )
|
||
|
{
|
||
|
choices[ i ] = new JButton( names[ i ] );
|
||
|
buttonPanel.add( choices[ i ] );
|
||
|
choices[ i ].addActionListener( handler );
|
||
|
}
|
||
|
Container c = getContentPane();
|
||
|
c.add( buttonPanel, BorderLayout.NORTH );
|
||
|
c.add( drawingArea, BorderLayout.CENTER );
|
||
|
}
|
||
|
|
||
|
public void setWidth( int w )
|
||
|
{
|
||
|
width = ( w >= 0 ? w : 300 );
|
||
|
}
|
||
|
|
||
|
public void setHeight( int h )
|
||
|
{
|
||
|
height = ( h >= 0 ? h : 200 );
|
||
|
}
|
||
|
|
||
|
public static void main( String args[] )
|
||
|
{
|
||
|
int width, height;
|
||
|
|
||
|
if ( args.length != 2 )
|
||
|
{
|
||
|
// no command-line arguments
|
||
|
width = 300;
|
||
|
height = 200;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
width = Integer.parseInt( args[ 0 ] );
|
||
|
height = Integer.parseInt( args[ 1 ] );
|
||
|
}
|
||
|
|
||
|
// create window in which applet will execute
|
||
|
JFrame applicationWindow = new JFrame( "An applet running as an application" );
|
||
|
|
||
|
applicationWindow.addWindowListener( new WindowAdapter()
|
||
|
{
|
||
|
public void windowClosing( WindowEvent e )
|
||
|
{
|
||
|
System.exit( 0 );
|
||
|
}
|
||
|
} );
|
||
|
|
||
|
// create one applet instance
|
||
|
DrawShapes appletObject = new DrawShapes();
|
||
|
appletObject.setWidth( width );
|
||
|
appletObject.setHeight( height );
|
||
|
|
||
|
// call applet's init and start methods
|
||
|
appletObject.init();
|
||
|
appletObject.start();
|
||
|
|
||
|
// attach applet to center of window
|
||
|
applicationWindow.getContentPane().add( appletObject );
|
||
|
|
||
|
// set the window's size
|
||
|
applicationWindow.setSize( width, height );
|
||
|
|
||
|
// showing the window causes all GUI components
|
||
|
// attached to the window to be painted
|
||
|
applicationWindow.show();
|
||
|
}
|
||
|
|
||
|
private class ButtonHandler implements ActionListener
|
||
|
{
|
||
|
public void actionPerformed( ActionEvent e )
|
||
|
{
|
||
|
for ( int i = 0; i < choices.length; i++ )
|
||
|
if ( e.getSource() == choices[ i ] )
|
||
|
{
|
||
|
drawingArea.setCurrentChoice( i );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// subclass of JPanel to allow drawing in a separate area
|
||
|
class DrawPanel extends JPanel
|
||
|
{
|
||
|
private int currentChoice = -1; // don't draw first time
|
||
|
private int width = 100, height = 100;
|
||
|
public DrawPanel( int w, int h )
|
||
|
{
|
||
|
width = ( w >= 0 ? w : 100 );
|
||
|
height = ( h >= 0 ? h : 100 );
|
||
|
}
|
||
|
|
||
|
public void paintComponent( Graphics g )
|
||
|
{
|
||
|
super.paintComponent( g );
|
||
|
|
||
|
switch( currentChoice )
|
||
|
{
|
||
|
case 0:
|
||
|
g.drawLine( randomX(), randomY(), randomX(), randomY() );
|
||
|
break;
|
||
|
case 1:
|
||
|
g.drawRect( randomX(), randomY(), randomX(), randomY() );
|
||
|
break;
|
||
|
case 2:
|
||
|
g.drawOval( randomX(), randomY(), randomX(), randomY() );
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void setCurrentChoice( int c )
|
||
|
{
|
||
|
currentChoice = c;
|
||
|
repaint();
|
||
|
}
|
||
|
private int randomX()
|
||
|
{
|
||
|
return (int) ( Math.random() * width );
|
||
|
}
|
||
|
|
||
|
private int randomY()
|
||
|
{
|
||
|
return (int) ( Math.random() * height );
|
||
|
}
|
||
|
}
|