MouseEvent ee.getX(),e.getY()是时时获得焦点坐标其他的我也不知道

解决方案 »

  1.   

    要用到 Java2D 的相关知识。
    可以看看相关的资源,和文档中的 java.awt.* 中的东西。
      

  2.   

    放大的思路可能是:先选好参照点,一般是中心。利用窗口的repaint()重绘。设置一个放大缩小的比例因子,对每一点进行放大缩小。
    保证划出的点再面板内不能,获得面板的区域,在获得鼠标的输入位置进行比较判断。
    建议可不可以利用java来调用Open GL,那你的这个东西就容易了。或者找找java有没有Open GL的接口
    ,也可以自己编接口程序。
      

  3.   

    1.将你想绘制的东西做成一个类
      如:
      public class myLine
      {
        int x=0,y=0;
        
        public myLine()
        {
         }
        
        public myLine(int x,int y)
        {
           this.x=x;this.y=y;
        }    public void draw(Graphics g)
        {
           Graphics2D g2d=(Graphics2D)g;
           
           g.drawLine(x,y);
         }
      }2.从JPanel派生一个画板类
      public class myCanvas extends JPanel implements MouseMotionListener
      {
         Vector mapObject=null;//用来保存对象
         int mouseNum=0;
         Point oldPt=new Point();
         Point newPt=new Point();
         
         public myCanvas()
         {
            mapObject=new Vector();
          }     public void paint(Graphics g)
         {
            for(int i=0;i<mapObject.size();i++)
            {
               myLine tmpLine=(myLine)mapObject.get(i);
               
               tmpLine.draw(g);
             }
         }     public void mouseClicked(MouseEvent e)
         {
            if(e.getButton()==e.BUTTON1)//如果按下左键
            {
               if(mouseNum>0)//如果是第二次按下
               {
                   newPt.x=e.getX();
                   newPt.y=e.getY();               myLine tmpLine=new myLine(oldPt,newPt);
                   mapObjetc.add(tmpLine);
                   
                   mouseNum=0;
                }
                else
                {
                    oldPt.x=e.getX();
                    oldPt.y=e.getY();
                    
                    mouseNum++;
                 }
            }
      }大概思路就是这样,我是随手写的,可能有些语法不对,主要是想绘你些思路。
      

  4.   

    谢谢各位指点!OpenGL我没有接触过,现在学很难。谢谢lzmailcn兄的热心帮助,有没有一些相关的资料,我说的具体一点:
    坐标值现在是从串口获得的,然后再实时在面板上画出来,保证在一定区域内。请问vaminal兄,在缩小的时候,前面显示的点要怎样保存起来,用什么方法?请各位高手不吝指点!
      

  5.   

    在鼠标的移动事件里实现!
    画图的模式用异或方式,在移动时,先在原位置上画一条,覆盖原来那条,之后再画出一条新的,这样就产生了动态画图的效果,有一本专门的JAVA2的书,就是完整的讲解了JAVA画图!
      

  6.   

    你串口每取一个点,new 一个Point(x,y),将对象压入数组,repaint(),这样保证每生成一个对象,都会实时绘出来,做一个全图显示函数,就可保证全部显示出来。//在每个map类中,如myLine中,加入一个取范围函数,如:
    ...
    public Rectangle getMapRect()
    {
        return new Rectangle(startP.x,startP.y,endP.x,Endp.y);
    }...在管理类中,增加取全部图元的范围函数,如在myCanvas 
    ...
    public Rectangle getAllRect()
    {
        if(mapObject.size()==0)//如果没有对象
            return this.getSize();//返回Panel的范围    int topLeftX=this.getSize().getX();//用Panel的范围作初始
        int topLeftY=this.getSize().getX();//用Panel的范围作初始
        int width=this.getSize().getWidth();//用Panel的范围作初始
        int height=this.getSize().getHeight();//用Panel的范围作初始    for(int i=0;i<mapObject.size();i++)
        {
           myLine line=(myLine)mapObject.get(i);//获取每个myLine对象
           
           if(topLeftX<line.getMapRect().getX())
               topLeftX=line.getMapRect().getX();       if(topLeftY<line.getMapRect().getY())
               topLeftY=line.getMapRect().getY();       if(Width<line.getMapRect().getWidth())
               hidth=line.getMapRect().getWidth();
           if(height<line.getMapRect().getHeight())
               height=line.getMapRect().getHeight();
        }
        
        return new Rectangle(topLeftX,topLeftY,width,height);
    }//复位显示所有图形
    public void zoomToShowAllMap()
    {
       if(this.getCurFunction()==25)//如果是复位图形
       {
    mapRectangle mapRect=getAllMapObjectsRect();
    Dimension canvasDimension=this.getSize();

    if(getAllMapObjectsRect()==null)
        return;

    //求取画布的大小
    int cW=canvasDimension.width;
    int cH=canvasDimension.height;

    //获取包含所有图元的最小矩形的大小
    float fW=(float)mapRect.getWidth();
    float fH=(float)mapRect.getHeight();

    int mW=mapTools.DLtoVL(fW);//宽
    int mH=mapTools.DLtoVL(fH);//高

    //计算缩放比例
    float blc1,blc2;
    blc1=(float)(mW)/(float)cW;//水平比例
    blc2=(float)(mH)/(float)cH;//垂直比例

    if(blc1<blc2)
       blc1=blc2;

    //保存新比例尺及原点
    mapTools.mapBlc*=blc1;
    mapTools.xStart=mapRect.getTopLeftX();
    mapTools.yStart=mapRect.getTopLeftY(); repaint();
         }
    }
      

  7.   

    谢谢lzmailcn兄,这个问题基本解决了
      

  8.   

    仅仅repaint()?不就覆盖了吗?不要改造一下吗?我是新人请勿BT.呵呵