在java做的画图板中,如何选中一个已经画好的图形,把它放大、缩小、移动???

问题描述

在java做的画图板中,如何选中一个已经画好的图形,把它放大、缩小、移动???类似windows的画图板功能,急呀,大牛们帮帮忙

解决方案

解决方案二:
你要做图形处理的话,在画这个图形的时候就要把图形的数据保存起来,例如:直线就要保存两个端点的坐标,圆就要保存圆心坐标和半径。然后根据操作,对保存的数据进行相应的处理,再重画图形。建议看下图形学的一些知识。
解决方案三:
可是我只是个菜鸟,不会那些呀,怎么能选中图形呢?
解决方案四:
packageaa;importjavax.swing.*;importjavax.swing.filechooser.*;importjava.awt.*;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.awt.event.MouseMotionListener;importjava.io.File;/***在窗体上拖拽图片。使用方法:双击窗体空白处将会弹出打开图片对话框。打开图片后可以在窗体上拖拽图片。*/publicclassDragingFrameextendsJFrame{/***构造函数**@throwsHeadlessException???*/publicDragingFrame()throwsHeadlessException{this.setDefaultCloseOperation(EXIT_ON_CLOSE);getContentPane().setLayout(newBorderLayout());getContentPane().add(newImagePanel(),BorderLayout.CENTER);}//程序入口publicstaticvoidmain(String[]args)throwsException{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());DragingFrameframe=newDragingFrame();frame.setSize(400,300);frame.setLocation(300,300);frame.setResizable(false);frame.setTitle("双击打开图片,然后拖拽");frame.setVisible(true);}}/***能够拖拽图片的面板*/classImagePanelextendsJPanel{privateDragStatusstatus=DragStatus.Ready;//拖拽状态privateImageimage;//要显示的图片privatePointimagePosition=newPoint(0,0),//图片的当前位置imageStartposition=newPoint(0,0),//每次拖拽开始时图片的位置(也就是上次拖拽后的位置)mouseStartposition;//每次拖拽开始时鼠标的位置ImagePanel(){addMouseListener(newMouseListener(){//双击鼠标时打开图片publicvoidmouseClicked(MouseEvente){if(e.getClickCount()==2){openImage();}}//按下鼠标时,更改状态,并且记录拖拽起始位置。publicvoidmousePressed(MouseEvente){if(status==DragStatus.Ready){status=DragStatus.Dragging;mouseStartposition=e.getPoint();imageStartposition.setLocation(imagePosition.getLocation());}}//松开鼠标时更改状态publicvoidmouseReleased(MouseEvente){if(status==DragStatus.Dragging){status=DragStatus.Ready;}}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}});addMouseMotionListener(newMouseMotionListener(){//Java有拖拽事件,在这个事件中移动图片位置publicvoidmouseDragged(MouseEvente){if(status==DragStatus.Dragging){moveImage(e.getPoint());}}publicvoidmouseMoved(MouseEvente){}});}/***移动图片。实际上画图工作在paintComponent()中进行,这里只是计算图片位置,然后调用该方法。**@parampoint当前的鼠标位置*/privatevoidmoveImage(Pointpoint){//图片的当前位置等于图片的起始位置加上鼠标位置的偏移量。imagePosition.setLocation(imageStartposition.getX()+(point.getX()-mouseStartposition.getX()),imageStartposition.getY()+(point.getY()-mouseStartposition.getY()));repaint();}//打开图片privatevoidopenImage(){System.out.println("Openingimage...");Filefile=createFileChooser().getSelectedFile();if(file!=null){image=Toolkit.getDefaultToolkit().getImage(file.getAbsolutePath());if(image!=null){this.repaint();}}}//创建打开文件对话框privateJFileChoosercreateFileChooser(){JFileChooserchooser=newJFileChooser();chooser.setDialogTitle("请选择图片文件...");chooser.addChoosableFileFilter(newFileNameExtensionFilter("常用图片格式","jpg","jpeg","gif","png"));chooser.showOpenDialog(this);returnchooser;}@OverrideprotectedvoidpaintComponent(Graphicsg){super.paintComponent(g);if(image!=null){g.drawImage(image,(int)imagePosition.getX(),(int)imagePosition.getY(),this);}}privateenumDragStatus{Ready,Dragging}}
解决方案五:
packageaa;importjava.io.File;importjavax.swing.filechooser.FileFilter;publicclassFileNameExtensionFilterextendsFileFilter{Stringstring;Stringstring2;Stringstring3;Stringstring4;Stringstring5;publicFileNameExtensionFilter(Stringstring,Stringstring2,Stringstring3,Stringstring4,Stringstring5){this.string=string;this.string2=string2;this.string3=string3;this.string4=string4;this.string5=string5;}publicFileFilterFileNameExtensionFilter(Strings1,Strings2,Strings3,Strings4,Strings5){returnnewFileNameExtensionFilter(s1,s2,s3,s4,s5);}@Overridepublicbooleanaccept(Filef){//TODOAuto-generatedmethodstubreturnfalse;}@OverridepublicStringgetDescription(){//TODOAuto-generatedmethodstubreturnnull;}}
解决方案六:
我对楼主的建议就是,实时获取panel的大小,设定比例参数,再调用repaint()方法不知道这是否能对楼主有所启发。。。。。。
解决方案七:
如果你使用了graphics或者graphics2d那么,我建议你使用仿射变换。AffineTransform使用这个操作非常方便,而且这个类就是用来处理图像的旋转,平移,放大,缩小。用不着手动去算改编后的尺寸,位置等。需要逻辑清晰一些。话说回来,用什么不需要逻辑清晰呢?
解决方案八:
用什么不需要逻辑清晰呢?
解决方案九:
设置事件侦听器,比如onmouseupondrag之类的取出变化的坐标值然后repaint()
解决方案十:
我也有类似的问题……
解决方案十一:
能否请高手发个相关的能实现选中图形,并能移动放缩的Java画图板程序。我也是新手,想知道这个怎么解决。

时间: 2024-12-31 20:03:08

在java做的画图板中,如何选中一个已经画好的图形,把它放大、缩小、移动???的相关文章

java:画图板的制作

学会了使用按钮监听以及鼠标监听器之后,我们就可以制作一个属于自己的画图板了,以下是我之前制作的一个简易的画图板,功能方面尚还不足,不过已经可以完成铅笔,橡皮,画直线,圆等基本工作了,还可以完成颜色的自由选择,大家不放自己也动手做做吧. 首先是界面类: Java代码 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import ja

使用HTML5做个画图板的方法介绍

首先要说明的是这里不是用鼠标画画,而是在触摸设备上用手指,比如ipad. &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 做画图板,自然使用html5的canvas来实现了.在canvas中我们可以画圆,画矩形,画自定义的线条等等.这次主要使用的画圆跟画线条来实现.html中支持对触摸事件的响应. onTouchStart 触摸开始 onTouchMove 触摸滑动 onTouchEnd 触摸结束 有了这些事件,

java基础-我是新手 用JAVA编写画图板时不知到怎么在菜单前边加上那一部分空白

问题描述 我是新手 用JAVA编写画图板时不知到怎么在菜单前边加上那一部分空白 我是新手 用JAVA编写画图板时不知到怎么在菜单前边加上那一部分空白

在java中定义了一个二维数组,这样做好像不对,输出时报错, 代码如下

问题描述 在java中定义了一个二维数组,这样做好像不对,输出时报错, 代码如下 我是想要定义一个二维数组,然后动态地给它赋值,应该怎么做不知道问题出在做么地方,请大神指导一下 ,代码如下: int[][] a = null; a[1] = new int[]{1,2,3}; System.out.println(a[1][1]); 解决方案 int[][] a = null; a = new int[5][];//第一维需要初始化 a[1] = new int[]{1,2,3};//这是第二维

菜鸟求指点:有关JAVA制作画图板程序

问题描述 先请求一下,哪位有程序员联合开发网账号的大虾可不可以帮忙下载一下如下两个源码:http://www.pudn.com/downloads133/sourcecode/java/detail565171.htmlhttp://www.pudn.com/downloads116/sourcecode/java/detail493169.html邮箱:bowway@gmail.com谢谢!!!!正题:本人不是学计算机的,但是我的硕士论文需要一个工具来采集数据,就是一个可以让用户使用程序提供的

类似画图板的小程序

最近做了一个类似Windows画图板的小程序,拿来和大家分享一下.功能和界面全部模仿于Windows自带的画图板,界面如截图.功能主要有: 手绘线.简单图形.文字输入.图块拖放.重复撤销.画面缩放.打开保存图片文件,另外为了直接从数据库或者XML中存取图片,另外还提供了从Base64编码存取图片的接口,其他还实现了和画图板同样效果的工具箱及颜料盒. 1.绘图: 绘制功能主要在OnLButtonDown.OnMouseMove.OnLButtonUp中实现,根据当前选择的工具和工具的样式进行绘制.

iOS开发之画图板(贝塞尔曲线)

贝塞尔曲线,听着挺牛气一词,不过下面我们在做画图板的时候就用到贝塞尔绘直线,没用到绘制曲线的功能.如果会点PS的小伙伴会对贝塞尔曲线有更直观的理解.这篇博文的重点不在于如何用使用贝塞尔曲线,而是利用贝塞尔划线的功能来封装一个画图板. 画图板的截图如下,上面的白板就是我们的画图板,是自己封装好的一个UIView,下面会详细的介绍如何封装这个画图板,下面的控件用来控制我们画图板的属性以及Undo,Redo和保存功能.点击保存时会把绘制的图片保存到手机的相册中.下面是具体的实现方案.   一.封装画图

框架-JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了

问题描述 JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了 这些操作做完后,数据库里的t_product表中,id=2的数据依然在,不是刷新的问题,刷新也还在 解决方案 为什么你的三个函数保存.修改.删除方法调用sql的时候都没有传递sql参数值呢? 解决方案二: 调用mapper里面的sql代码的时候,把要删除的id传进去了吗?不应该是sqlsession.delete("",参数);吗? 解决方案三: 参数没带.sqlsession.delect带上id 解决

java 断开从连接池中获取的连接,规范的操作是怎样的

问题描述 java断开从连接池中获取的连接,规范的操作是怎样的,ResultSet,PreparedStatement,Connection是否需要依次关闭,若需要,应该怎么做才是高效率,规范,而且不会发生内存泄露.涉及到很多try和catch,不知怎么处理. 解决方案 解决方案二:ResultSet,PreparedStatement,Connection是否需要依次关闭需要应该怎么做才是高效率写一个函数用来关闭,如放在的帮助类JdbcUtil里,如publicstaticvoidreleas