也就是说我想做成window下面的那个画图小工具里面的
画折线(用鼠标拉的)

解决方案 »

  1.   

    你的程序我调了一下,没问题了
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.*;public class Drawpollygon extends JFrame{
      private Pollygon ply;
      public Drawpollygon()
      {
        ply = new Pollygon();
        ply.setBackground(Color.white);
        getContentPane().add(ply,BorderLayout.CENTER);
        setSize(300,300);
        show();
      }
      public static void main(String args[])
      {
        Drawpollygon dp = new Drawpollygon();
        dp.addWindowListener(
          new WindowAdapter(){
            public void windowClosing(WindowEvent e)
            {
              System.exit(0);
            }
          }
        );
      }
    }
    /**
      @用来贮存画过的折线的类
    */
    class XY{
      private final Vector v = new Vector();  
      private Point point ;
      private Integer value=null;
      private int[] x,y;
     
      public void add(Point p)
      {
        point = p;
        v.add(point);
      }
      public int[] getX()//返回一个所要画的折线的x轴的数组
      {
       x= new int[v.size()];
        for(int i=0;i<v.size();i++)
        {
          point = (Point)v.elementAt(i);
          x[i] = (int)Math.round(point.getX());
        }
        return x;
      }
      public int[] getY()//返回一个所要画的折线的y轴的数组
      {
        y = new int[v.size()];
        for (int i= 0;i<v.size();i++)
        {
          point = (Point)v.elementAt(i);
          y[i] = (int)Math.round(point.getY());
        }
        return y;
      }
      public int length()//返回所画的折线的点数
      { return v.size(); }
    }
    class Pollygon extends JPanel{
      private XY xy ;
      private Point pXY;
      
      public Pollygon()
      {
        setSize(new Dimension(150,100));
        setVisible(true);
        xy = new XY();
        pXY=null;
        addMouseListener(
          new MouseAdapter(){
            public void mousePressed( MouseEvent e)
            {
              if(pXY ==null)
              {
               pXY =new Point();
                pXY.x = e.getX();
                pXY.y = e.getY();
                xy.add(pXY);
                pXY=null;
              }
           
            }
            public void mouseReleased(MouseEvent e)
            {
              if(pXY ==null)
             { 
               pXY =new Point();
               pXY.y= e.getY();
               pXY.x=e.getX();
               xy.add(pXY);
               pXY = null;
             }
              //repaint();
            }
         }
       );
       addMouseMotionListener(
         new MouseMotionAdapter(){
           public void  mouseDragged(MouseEvent e)
           {
             if(pXY ==null)
             { 
               pXY =new Point();
               pXY.y= e.getY();
               pXY.x=e.getX();
               xy.add(pXY);
               pXY = null;
             }
             repaint();
           }
         }
       );
      } 
      public void paintComponent(Graphics g)
      {
        super.paintComponent(g);
        g.drawPolygon(xy.getX(),xy.getY(),xy.length());
      }
    }
      

  2.   

    wanglh2000 在吗.
    能帮我再看这道题吗?
      

  3.   

    不知你要的是不是仅是画折线,还是画多边形。
    不过给出我的实现。
    环境:win2k+sp3+jdk1.4.1
    /**
    * PolyLine.java
    * Draw polyline using mouse in window
    *
    *@author sam(yeahspyme)
    *@version 1.0 May 20,2003
    **/package app;
    import java.awt.*;
    import java.awt.event.*;class polyline extends Frame implements MouseListener
    {
    Point line[];
    //boolean drawing=false;
    int count=0;
    polyline() {
    super();
    line=new Point[50];
    addMouseListener(this);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    }
    public void mouseClicked(MouseEvent e) {
    line[count++]=e.getPoint();
    if(count!=1) repaint();
    }
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void paint(Graphics g) {
    for(int i=1;i<count;i++) {
    g.drawLine((int)line[i-1].getX(),(int)line[i-1].getY(),
    (int)line[i].getX(),(int)line[i].getY());
    }
    }
    public static void main(String []args) {
    polyline f=new polyline();
    f.setSize(400,300);
    f.show();
    }
    }
      

  4.   

    谢谢楼上的!
    就是你的这种效果了.
    但你只是可以clicked来画折线.如果是又可以用dragged也可以用clicked
    又怎么实现呢???
    解决了立刻结帐!!
      

  5.   

    java.awt.event.MouseMotionListener
      

  6.   

    好了,我改好了,现在唯一的缺点就是不能画多条折线。
    调试环境:win2k+sp3+jdk1.4.1/**
    * PolyLine.java
    * Draw polyline using mouse in window
    * Usage:
    *  Click the left mouse button to draw,and double-click the left mouse
    * button to end.
    *
    *@author sam(yeahspyme)
    *@version 1.1 May 21,2003
    **/package app;
    import java.awt.*;
    import java.awt.event.*;class polyline extends Frame implements MouseListener,MouseMotionListener
    {
    Point line[];
    Point now;
    boolean drawing=false;
    int count=0;
    polyline() {
    super();
    line=new Point[50];
    addMouseListener(this);
    addMouseMotionListener(this);
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    }
    public void mouseClicked(MouseEvent e) {
    line[count++]=e.getPoint();
    if(count!=1) repaint();
    drawing=true;
    if(e.getClickCount()==2) drawing=false;
    }
    public void mouseMoved(MouseEvent e) {
    if(drawing) {
    now=e.getPoint();
    if(count!=0) repaint();
    }
    }
    public void mouseDragged(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
    public void paint(Graphics g) {
    int i;
    for(i=1;i<count;i++) {
    g.drawLine((int)line[i-1].getX(),(int)line[i-1].getY(),
    (int)line[i].getX(),(int)line[i].getY());
    }
    if(count!=0&&drawing) {
    g.drawLine((int)line[count-1].getX(),(int)line[count-1].getY(),
    (int)now.getX(),(int)now.getY());
    }
    }
    public static void main(String []args) {
    polyline f=new polyline();
    f.setSize(400,300);
    f.show();
    }
    }
      

  7.   

    你好好看一下我的Usage!
    闪,那是必然的,这种实现方法无法避免
    可以停下(双击),只是无法画多条折线。