Results 1 to 4 of 4

Thread: Got any line-Art applet code?

  1. #1

    Thread Starter
    Hyperactive Member
    Join Date
    Jun 1999
    Location
    ma,usa
    Posts
    485
    Hi everyone! I'm new to java and wondering if anyone could share some code with me. In Visual Basic the following code draws lines using the mousemove event. How can I do this using java:

    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Line (CurrentX, CurrentY)-(X, Y)
    End Sub

    Thanks in advance,
    Joey O.

  2. #2
    Monday Morning Lunatic parksie's Avatar
    Join Date
    Mar 2000
    Location
    Mashin' on the motorway
    Posts
    8,169
    try this - it's one of the Java2 v1.2.1 demo applets:

    Code:
    /*
     * @(#)DrawTest.java	1.6 98/07/07
     *
     * Copyright (c) 1997, 1998 Sun Microsystems, Inc. All Rights Reserved.
     *
     * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
     * modify and redistribute this software in source and binary code form,
     * provided that i) this copyright notice and license appear on all copies of
     * the software; and ii) Licensee does not utilize the software in a manner
     * which is disparaging to Sun.
     *
     * This software is provided "AS IS," without a warranty of any kind. ALL
     * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
     * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
     * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
     * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
     * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
     * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
     * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
     * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
     * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
     * POSSIBILITY OF SUCH DAMAGES.
     *
     * This software is not designed or intended for use in on-line control of
     * aircraft, air traffic, aircraft navigation or aircraft communications; or in
     * the design, construction, operation or maintenance of any nuclear
     * facility. Licensee represents and warrants that it will not use or
     * redistribute the Software for such purposes.
     */
    
    import java.awt.event.*;
    import java.awt.*;
    import java.applet.*;
    
    import java.util.Vector;
    
    public class DrawTest extends Applet{
        DrawPanel panel;
        DrawControls controls;
    
        public void init() {
    	setLayout(new BorderLayout());
    	panel = new DrawPanel();
            controls = new DrawControls(panel);
    	add("Center", panel);
    	add("South",controls);
        }
    
        public void destroy() {
            remove(panel);
            remove(controls);
        }
    
        public static void main(String args[]) {
    	Frame f = new Frame("DrawTest");
    	DrawTest drawTest = new DrawTest();
    	drawTest.init();
    	drawTest.start();
    
    	f.add("Center", drawTest);
    	f.setSize(300, 300);
    	f.show();
        }
        public String getAppletInfo() {
            return "A simple drawing program.";
        }
    }
    
    class DrawPanel extends Panel implements MouseListener, MouseMotionListener {
        public static final int LINES = 0;
        public static final int POINTS = 1;
        int	   mode = LINES;
        Vector lines = new Vector();
        Vector colors = new Vector();
        int x1,y1;
        int x2,y2;
        int xl, yl;
    
        public DrawPanel() {
    	setBackground(Color.white);
    	addMouseMotionListener(this);
    	addMouseListener(this);
        }
    
        public void setDrawMode(int mode) {
    	switch (mode) {
    	  case LINES:
    	  case POINTS:
    	    this.mode = mode;
    	    break;
    	  default:
    	    throw new IllegalArgumentException();
    	}
        }
    
    
        public void mouseDragged(MouseEvent e) {
            e.consume();
            switch (mode) {
                case LINES:
                    xl = x2;
                    yl = y2;
                    x2 = e.getX();
                    y2 = e.getY();
                    break;
                case POINTS:
                default:
                    colors.addElement(getForeground());
                    lines.addElement(new Rectangle(x1, y1, e.getX(), e.getY()));
                    x1 = e.getX();
                    y1 = e.getY();
                    break;
            }
            repaint();
        }
    
        public void mouseMoved(MouseEvent e) {
        }
    
        public void mousePressed(MouseEvent e) {
            e.consume();
            switch (mode) {
                case LINES:
                    x1 = e.getX();
                    y1 = e.getY();
                    x2 = -1;
                    break;
                case POINTS:
                default:
                    colors.addElement(getForeground());
                    lines.addElement(new Rectangle(e.getX(), e.getY(), -1, -1));
                    x1 = e.getX();
                    y1 = e.getY();
                    repaint();
                    break;
            }
        }
    
        public void mouseReleased(MouseEvent e) {
            e.consume();
            switch (mode) {
                case LINES:
                    colors.addElement(getForeground());
                    lines.addElement(new Rectangle(x1, y1, e.getX(), e.getY()));
                    x2 = xl = -1;
                    break;
                case POINTS:
                default:
                    break;
            }
            repaint();
        }
    
        public void mouseEntered(MouseEvent e) {
        }
    
        public void mouseExited(MouseEvent e) {
        }
    
        public void mouseClicked(MouseEvent e) {
        }
    
        public void paint(Graphics g) {
    	int np = lines.size();
    
    	/* draw the current lines */
    	g.setColor(getForeground());
    	g.setPaintMode();
    	for (int i=0; i < np; i++) {
    	    Rectangle p = (Rectangle)lines.elementAt(i);
    	    g.setColor((Color)colors.elementAt(i));
    	    if (p.width != -1) {
    		g.drawLine(p.x, p.y, p.width, p.height);
    	    } else {
    		g.drawLine(p.x, p.y, p.x, p.y);
    	    }
    	}
    	if (mode == LINES) {
    	    g.setXORMode(getBackground());
    	    if (xl != -1) {
    		/* erase the last line. */
    		g.drawLine(x1, y1, xl, yl);
    	    }
    	    g.setColor(getForeground());
    	    g.setPaintMode();
    	    if (x2 != -1) {
    		g.drawLine(x1, y1, x2, y2);
    	    }
    	}
        }
    }
    
    
    class DrawControls extends Panel implements ItemListener {
        DrawPanel target;
    
        public DrawControls(DrawPanel target) {
    	this.target = target;
    	setLayout(new FlowLayout());
    	setBackground(Color.lightGray);
    	target.setForeground(Color.red);
    	CheckboxGroup group = new CheckboxGroup();
    	Checkbox b;
    	add(b = new Checkbox(null, group, false));
    	b.addItemListener(this);
    	b.setForeground(Color.red);
    	add(b = new Checkbox(null, group, false));
    	b.addItemListener(this);
    	b.setForeground(Color.green);
    	add(b = new Checkbox(null, group, false));
    	b.addItemListener(this);
    	b.setForeground(Color.blue);
    	add(b = new Checkbox(null, group, false));
    	b.addItemListener(this);
    	b.setForeground(Color.pink);
    	add(b = new Checkbox(null, group, false));
    	b.addItemListener(this);
    	b.setForeground(Color.orange);
    	add(b = new Checkbox(null, group, true));
    	b.addItemListener(this);
    	b.setForeground(Color.black);
    	target.setForeground(b.getForeground());
    	Choice shapes = new Choice();
    	shapes.addItemListener(this);
    	shapes.addItem("Lines");
    	shapes.addItem("Points");
    	shapes.setBackground(Color.lightGray);
    	add(shapes);
        }
    
        public void paint(Graphics g) {
    	Rectangle r = getBounds();
    	g.setColor(Color.lightGray);
    	g.draw3DRect(0, 0, r.width, r.height, false);
    
            int n = getComponentCount();
            for(int i=0; i<n; i++) {
                Component comp = getComponent(i);
                if (comp instanceof Checkbox) {
                    Point loc = comp.getLocation();
                    Dimension d = comp.getSize();
                    g.setColor(comp.getForeground());
                    g.drawRect(loc.x-1, loc.y-1, d.width+1, d.height+1);
                }
            }
        }
    
      public void itemStateChanged(ItemEvent e) {
        if (e.getSource() instanceof Checkbox) {
          target.setForeground(((Component)e.getSource()).getForeground());
        } else if (e.getSource() instanceof Choice) {
          String choice = (String) e.getItem();
          if (choice.equals("Lines")) {
    	target.setDrawMode(DrawPanel.LINES);
          } else if (choice.equals("Points")) {
    	target.setDrawMode(DrawPanel.POINTS);
          }
        }
      }
    }
    phew. finished!

    it's a full applet so it should compile straight off if you put it into DrawTest.java

  3. #3

    Thread Starter
    Hyperactive Member
    Join Date
    Jun 1999
    Location
    ma,usa
    Posts
    485
    Thanks! You must have blisters on that typing finger! But seriously I can't thank you enough. Could you help me one more time and tell me how you found this? I've had trouble finding my way around the java sites and for that matter finding any relevant code too. Could you post the address of where they hide the code?
    Thanks Again,
    Joey O.

  4. #4
    Monday Morning Lunatic parksie's Avatar
    Join Date
    Mar 2000
    Location
    Mashin' on the motorway
    Posts
    8,169
    actually, I did a copy-n-paste straight from the example file! It came with my copy of the JDK, under

    JDK_12\demo\applets\DrawTest

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width