我要做一个JAVA画图程序(画些简单的点和线,矩形和圆形),当然画的部分都比较简单,但有2个部分比较难:
1.要求能选择图形,并能对选定的图形进行拖动。
2.能够保存.....我画在一个JPanel中,请问各位大哥,怎么保存.......而且要可以打开的哦,当然矢量或者栅格随便。哪位大哥提示下,在上面两个方面的任何一个方面都可以,小弟先谢过了。

解决方案 »

  1.   

    我的想法是:当单击鼠标时,调用find()查看是否选中了已有的图形,如果有,就可以进行拖动,没有选中,就可以绘制新的图形了!其中find()已基本实现
    public viod mousePressed(MouseEvent e){
    ····
    find(e.getX(),e.getY());
    }
    public void mouseDragged(MouseEvent e){
    //实现拖动
    if(Shape!=null){
    ···
    repaint();
    }
    }
    public Shape find(int x,int y){
    for(Line2D l:lines)
    if(l.contains(x,y))
      return current=l;
    for(Rectangle2D r:squares)
    if(r.contains(x,y))
     return current=r;
    ······
    return null;}
      

  2.   

    看看java.awt.dnd包吧,实现拖放很容易
      

  3.   

    java截屏,印象里要写个动态链接库
      

  4.   

    不需要  rebot 截屏
      

  5.   

    ----------------------------------------------------------------------------------------
     回复人:DelphiStudy(拿下BCD就去搞C++) ( 三级(初级)) 信誉:100  2007-05-31 12:02:52  得分:0

    java截屏,印象里要写个动态链接库
    -----------------------------------------------------------------------
    不懂不要装懂,误人误己,不知道的时候,不回答比错误回答要好不知道多少 回复人:jtacm(jtacm) ( 一级(初级)) 信誉:100  2007-5-27 9:09:42  得分:0
    ?  请问怎么保存为Bmp?
    ----------------------------------------------------------------------------------- try {
    BufferedImage image = new Robot().createScreenCapture(new Rectangle(10,10,100,100));
    ImageIO.write(image, "jpg", new File("/tmp/output.jpg"));
    } catch (AWTException e) {
    e.printStackTrace();
    }
      

  6.   

    1.如何拖动
    将所画控件(如举行)的上下左右顶点及各边中点算出并保存在该控件对象中,然后根据这八个点在Panel中画八个小矩形,
    给panel添加鼠标监听事件,根据按下鼠标时mousePressed(MouseEvent e) 鼠标的x、y坐标(e.getX()、e.getY())判断其是否在八个矩形中的任意一个,若是根据鼠标所在矩形的位置设定调整大小的类型,当鼠标拖动时mouseDragged(MouseEvent e) 根据鼠标拖动的距离以及鼠标所处矩形类型调整控件大小即可。也可以在释放鼠标时一次性调整大小。
    2.如何保存
    将所画控件导出成一份xml即可,大致应包含控件类型,所处坐标,长宽等基本属性,这就要看你的要求来设计了。相应的要有一个导入xml的的方法将这份xml还原为对应的数据对象,同样,对象的复杂度也由你邪恶需求确定
      

  7.   

    1 拖动响应鼠标拖动事件,在监听器中动态图像坐标,调用JPanel的repaint,重写JPanel的paint方法进行绘图2 保存请参考ImageWriter相关类
      

  8.   

    忘了说了,打开的时候参考 ImageReader 类