home *** CD-ROM | disk | FTP | other *** search
Java Source | 2001-04-22 | 11.4 KB | 506 lines |
-
- // DrawingApp.java
-
- import java.io.*;
- import java.util.*;
- import java.lang.Math;
- import java.awt.*;
- import java.awt.event.*;
-
- class DrawingApp extends Frame implements ActionListener,ItemListener, AdjustmentListener
- {
- static final int RECT = 1;
- static final int CIRCLE = 2;
- static final int LINE = 3;
-
- Frame frame;
- MyCanvas mycanvas;
- Label y_coor;
- Label x_coor;
- Panel panel1;
- Panel panel2;
- Panel panel3;
- Button undo;
- Checkbox filled;
- CheckboxGroup shape;
- Checkbox rectangle;
- Checkbox circle;
- Checkbox line;
- MenuBar bar;
- Menu mFile;
- Menu mHelp;
- MenuItem mLoad;
- MenuItem mSave;
- MenuItem mPrint;
- MenuItem mQuit;
- Rect r;
- Circle c;
- Line l;
- int x_pos;
- int y_pos;
- int iShape = RECT;
- boolean bFilled = false;
- Color cColor = Color.black;
- String fPathname;
- String sFile;
- Scrollbar red;
- Scrollbar blue;
- Scrollbar green;
- Label tred;
- Label tblue;
- Label tgreen;
- Canvas clr;
- int rd;
- int gr;
- int bl;
-
- public static void main (String [] args)
- {
- DrawingApp drawapp = new DrawingApp ();
- drawapp.go ();
- }
-
- public void go ()
- {
- frame = new Frame ("Untitled");
-
- bar = new MenuBar ();
- frame.setMenuBar (bar);
-
- mFile = new Menu ("File");
- bar.add(mFile);
- mSave = new MenuItem ("Save");
- // Register the menu to listen for an actionevent
- mSave.addActionListener (this);
-
- mLoad = new MenuItem ("Load");
- // Register the menu to listen for an actionevent
- mLoad.addActionListener (this);
-
- mPrint = new MenuItem ("Print");
- // Register the menu to listen for an actionevent
- mPrint.addActionListener (this);
-
- mQuit = new MenuItem ("Quit");
- // Register the menu to listen for an actionevent
- mQuit.addActionListener (this);
-
-
- mFile.add (mSave);
- mFile.add (mLoad);
- mFile.addSeparator ();
- mFile.add (mPrint);
- mFile.addSeparator ();
- mFile.add (mQuit);
-
- mycanvas = new MyCanvas ();
- // Register the button to listen for an mouseevent
- mycanvas.addMouseListener (new MouseHandler ());
- mycanvas.addMouseMotionListener (new MouseMotionHandler ());
- frame.add ("Center", mycanvas);
-
- panel3 = new Panel ();
- panel3.setLayout (new FlowLayout(FlowLayout.LEFT));
- panel3.setBackground (Color.lightGray);
-
- // Scrollbar color blue
- blue = new Scrollbar (Scrollbar.VERTICAL, 0, 20, 0, 275);
- blue.addAdjustmentListener (this);
- tblue = new Label ();
- tblue.setText ("B");
- panel3.add (blue);
- panel3.add (tblue);
-
- // Scrollbar color red
- red = new Scrollbar (Scrollbar.VERTICAL, 0, 20, 0, 275);
- red.addAdjustmentListener (this);
- tred = new Label ();
- tred.setText ("R");
- panel3.add (red);
- panel3.add (tred);
-
- // Scrollbar color green
- green = new Scrollbar (Scrollbar.VERTICAL, 0, 20, 0, 275);
- green.addAdjustmentListener (this);
- tgreen = new Label ();
- tgreen.setText ("G");
- panel3.add (green);
- panel3.add (tgreen);
-
- // Canvas for drawing
- clr = new Canvas ();
- clr.setBackground (Color.black);
- clr.setSize (25,25);
- panel3.add (clr);
-
- // X,Y coor
- x_coor = new Label ("X: ");
- y_coor = new Label ("Y: ");
-
- panel3.add (x_coor);
- panel3.add (y_coor);
-
- panel2 = new Panel ();
- panel2.setLayout (new FlowLayout(FlowLayout.RIGHT));
- panel2.setBackground (Color.lightGray);
-
- shape = new CheckboxGroup ();
- rectangle = new Checkbox ("Rect", shape, true);
- circle = new Checkbox ("Circle", shape, false);
- line = new Checkbox ("Line", shape, false);
- // Register the choices to listen for an itemevent
- rectangle.addItemListener (this);
- circle.addItemListener (this);
- line.addItemListener (this);
-
- panel2.add (circle);
- panel2.add (rectangle);
- panel2.add (line);
-
- filled = new Checkbox ("Filled");
- panel2.add (filled);
- // Register the button to listen for an actionevent
- filled.addItemListener (this);
-
- undo = new Button ("Undo");
- // Register the button to listen for an actionevent
- undo.addActionListener (this);
-
- panel2.add (undo);
-
- panel1 = new Panel ();
- panel1.setLayout (new BorderLayout());
- panel1.add ("North", panel2);
- panel1.add ("South", panel3);
-
- frame.add ("South", panel1);
-
- frame.pack ();
-
- // Register window to listen for a window event
- frame.addWindowListener (new WindowHandler ());
- frame.setSize (500,500);
- frame.setVisible (true);
- }
-
- public void adjustmentValueChanged (AdjustmentEvent e)
- {
- rd = red.getValue();
- gr = green.getValue();
- bl = blue.getValue();
-
- // Set new drawing color
- cColor = new Color (rd, gr, bl);
- clr.setBackground (cColor);
- }
-
- public void itemStateChanged (ItemEvent e)
- {
- // Shape selection
- if (e.getItem () == "Rect")
- {
- iShape = RECT;
- }
- else if (e.getItem () == "Circle")
- {
- iShape = CIRCLE;
- }
- else if (e.getItem () == "Line")
- {
- iShape = LINE;
- filled.setState (false);
- bFilled = false;
- }
- // Filled selection
- else if (e.getStateChange() == ItemEvent.SELECTED)
- {
- // Check for shapes other than a line
- if (iShape != LINE)
- {
- bFilled = true;
- }
- else
- {
- // Line
- bFilled = false;
- filled.setState (false);
- }
- }
- else
- {
- // Filled not selected
- bFilled = false;
- }
- }
-
- public void actionPerformed (ActionEvent e)
- {
- // Menu action load
- if (e.getActionCommand () == "Load" )
- {
- FileDialog filedialog = new FileDialog (this, "Load", FileDialog.LOAD);
- filedialog.setVisible (true);
-
- fPathname = filedialog.getDirectory () + filedialog.getFile ();
- sFile = filedialog.getFile ();
-
- if ( fPathname != null)
- {
- File f = new File (fPathname);
-
- try
- {
- // Create object input stream
- FileInputStream fIn = new FileInputStream (f);
- ObjectInputStream in = new ObjectInputStream (fIn);
-
- // Read the vector
- Vector v = (Vector)in.readObject();
- in.close ();
-
- // Clear current drawings
- mycanvas.removeAll ();
-
- // Set vector
- mycanvas.setVect (v);
- mycanvas.repaint();
- }
- catch (IOException ioe)
- {
- ioe.printStackTrace ();
- }
- catch (ClassNotFoundException ce)
- {
- System.out.println ("Incorrect object type");
- }
- }
- }
-
- // Menu action save
- if (e.getActionCommand () == "Save" )
- {
- FileDialog filedialog = new FileDialog (this, "Save", FileDialog.SAVE);
- filedialog.setVisible (true);
-
- fPathname = filedialog.getDirectory () + filedialog.getFile ();
- sFile = filedialog.getFile ();
-
- if ( fPathname != null)
- {
- File f = new File (fPathname);
-
- try
- {
- // Create a object output stream
- FileOutputStream fOut = new FileOutputStream (f);
- ObjectOutputStream out = new ObjectOutputStream (fOut);
-
- // Get vector containing the shapes
- Vector v = mycanvas.getVect();
-
- out.writeObject (v);
- out.close ();
- }
- catch (IOException ioe)
- {
- ioe.printStackTrace ();
- }
- }
- }
-
- // Menu action quit
- if (e.getActionCommand () == "Quit" )
- {
- System.exit (0);
- }
-
- if (e.getActionCommand () == "Undo" )
- {
- mycanvas.removeLast ();
- }
-
- if (e.getActionCommand () == "Help" )
- {
- }
-
- if (e.getActionCommand () == "Print" )
- {
- Toolkit t = mycanvas.getToolkit ();
-
- PrintJob job = t.getPrintJob (this, "Printing....", null);
-
- if ( job != null )
- {
- Graphics page = job.getGraphics ();
-
- // Center it on the page and draw a rectangle aroud it
- Dimension size = mycanvas.getSize ();
- Dimension pagesize = job.getPageDimension ();
- page.translate ((pagesize.width - size.width)/2,
- (pagesize.height - size.height)/2);
- page.drawRect (-1, -1, size.width+1, size.height + 1);
- page.setClip (0, 0, size.width, size.height);
-
- mycanvas.printAll (page);
- page.dispose ();
- job.end ();
- }
- }
- }
-
-
- class WindowHandler extends WindowAdapter
- {
- public void windowClosing (WindowEvent e)
- {
- System.exit (0);
- }
- }
-
- class MouseMotionHandler extends MouseMotionAdapter
- {
- // Update mouse coor
- public void mouseMoved (MouseEvent e)
- {
- x_coor.setText ("X: " + e.getX());
- y_coor.setText ("Y: " + e.getY());
- }
-
- // Update mouse coor
- public void mouseDragged (MouseEvent e)
- {
- x_coor.setText ("X: " + e.getX());
- y_coor.setText ("Y: " + e.getY());
- }
- }
-
- class MouseHandler extends MouseAdapter
- {
- // Change mouse cursor to crosshair if inside canvase
- public void mouseEntered (MouseEvent e)
- {
- frame.setCursor (Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
- x_coor.setText ("X: " + e.getX());
- y_coor.setText ("Y: " + e.getY());
- }
-
- // Change mouse cursor to arrow if outside canvas
- public void mouseExited (MouseEvent e)
- {
- frame.setCursor (Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
- x_coor.setText ("X: ");
- y_coor.setText ("Y: ");
- }
-
-
- public void mousePressed (MouseEvent e)
- {
- // Start of drawing shape
- if ( iShape == RECT)
- {
- r = new Rect ();
-
- x_pos = e.getX();
- y_pos = e.getY();
- }
- else if ( iShape == CIRCLE )
- {
- c = new Circle ();
-
- x_pos = e.getX();
- y_pos = e.getY();
- }
- else if ( iShape == LINE )
- {
- l = new Line ();
-
- x_pos = e.getX();
- y_pos = e.getY();
- }
- else
- {
- System.out.println ("Major error");
- System.exit (0);
- }
- }
-
- public void mouseReleased (MouseEvent e)
- {
- int width;
- int height;
-
- // Calculate width and heigt of shape
- width = x_pos - e.getX();
- height = y_pos - e.getY();
-
- // End drawing a shape
- if (( iShape == RECT ) || ( iShape == CIRCLE ))
- {
- /*
- * If drawing from bottom to top of canvas
- * width and x_pos needs to be adjusted
- */
- if ( width > 0 )
- {
- width = Math.abs(width);
- x_pos = x_pos - width;
- }
- else
- width = Math.abs(width);
-
- /*
- * If drawing from bottom to top of canvas
- * height and y_pos needs to be adjusted
- */
- if ( height > 0 )
- {
- height = Math.abs(height);
- y_pos = y_pos - height;
- }
- else
- height = Math.abs(height);
- }
-
- if ( iShape == RECT )
- {
- r.setX(x_pos);
- r.setY(y_pos);
- r.setWidth(width);
- r.setHeight(height);
- r.setClr (cColor);
- r.setFilled (bFilled);
-
- mycanvas.addRect (r);
- mycanvas.repaint();
- }
- else if ( iShape == CIRCLE )
- {
- c.setX(x_pos);
- c.setY(y_pos);
- c.setRadius(width, height);
- c.setClr (cColor);
- c.setFilled (bFilled);
-
- mycanvas.addCircle (c);
- mycanvas.repaint();
- }
- else if ( iShape == LINE )
- {
- l.setX(x_pos);
- l.setY(y_pos);
- l.setWidth(e.getX());
- l.setHeight(e.getY());
- l.setClr (cColor);
-
- mycanvas.addLine (l);
- mycanvas.repaint();
- }
- else
- {
- System.out.println ("Major error");
- System.exit (0);
- }
- }
- }
- }
-