如何改变affinetransform的原点

问题描述

使用affinetransform进行图像的拖动时,鼠标的位置总是处于图像的左上角。如何改变鼠标的位置,使得鼠标可以点中图像中的任意位置而进行拖动?

解决方案

解决方案二:
下面的程序也体现了这个问题,不管当鼠标点中正方形的哪个部分,当拖动时,正方形自动跳到鼠标的右下角。importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.Point;importjava.awt.event.MouseEvent;importjava.awt.event.MouseListener;importjava.awt.event.MouseMotionListener;importjava.awt.geom.AffineTransform;importjava.awt.geom.Point2D;importjava.awt.geom.Rectangle2D;importjava.awt.geom.Point2D.Double;importjavax.swing.JFrame;importjavax.swing.JPanel;publicclassAffineTestextendsJFrame{/****/privatestaticfinallongserialVersionUID=1L;publicRectangle2D.Doublerect=newRectangle2D.Double(30,50,60,60);publicdoublemovex=0,movey=0;Point2DclickPoint=newPoint2D.Double(0,0);publicAffineTest(){this.setSize(600,600);this.setLocationRelativeTo(null);this.add(newDrawingPanel());this.setVisible(true);}privateclassDrawingPanelextendsJPanel{publicDrawingPanel(){this.addMouseListener(newpanelListener());this.addMouseMotionListener(newpanelListener());}publicvoidpaintComponent(Graphicsg){super.paintComponent(g);AffineTransformtx=newAffineTransform();if(rect.contains((Point2D.Double)clickPoint)){tx.translate(movex,movey);}Graphics2Dg2d=(Graphics2D)g;g2d.setTransform(tx);g2d.draw(rect);repaint();}}privateclasspanelListenerimplementsMouseListener,MouseMotionListener{@OverridepublicvoidmouseClicked(MouseEvente){clickPoint.setLocation(e.getX(),e.getY());repaint();}@OverridepublicvoidmouseEntered(MouseEventarg0){//TODOAuto-generatedmethodstub}@OverridepublicvoidmouseExited(MouseEventarg0){//TODOAuto-generatedmethodstub}@OverridepublicvoidmousePressed(MouseEventarg0){//TODOAuto-generatedmethodstub}@OverridepublicvoidmouseReleased(MouseEventarg0){//TODOAuto-generatedmethodstub}@OverridepublicvoidmouseDragged(MouseEventarg0){movex=arg0.getX();movey=arg0.getY();}@OverridepublicvoidmouseMoved(MouseEventarg0){//TODOAuto-generatedmethodstub}}publicstaticvoidmain(String[]args){newAffineTest();}}

时间: 2024-09-13 17:22:46

如何改变affinetransform的原点的相关文章

CSS3的transform知识:详解transform

文章简介:在这篇文章,回顾了CSS3的transform的基本知识,然后深入介绍了transform-origin的相关知识. 在CSS2.1中,我们的页面都是静态的,网页设计师也习惯把它作为页面效果的设计工具.但往往有些页面效果不只是静态的,比如说,如何实际移动一些元素?如何更改元素的外观--旋转或缩放? 多年来,Web设计师为了给修改页面的外观,都依赖于图片.Flash或JavaScript才能完成.不过,CSS3将要改变设计师这种思维,进入CSS3时代,借助CSS3就可以轻松倾斜.缩放.移

JAVA程序员必读:基础篇(4)类和继承

程序|程序员|继承 这节教程将开始讨论对象的生命周期.包括怎样创建对象.怎样使用它以及在不使用它的时候将它从系统中清除.下面一个一个介绍:4.1 对象的生命周期 在这一小节中你可以学到怎样创建和使用任何类型的对象,还讨论了当对象不再需要的时候系统怎样清除对象的. 典型的JAVA程序创建对象,对象之间的交互是通过发送消息来实现的.通过这些对象的交互,JAVA程序可以执行一个GUI.运行一个动画或者通过网络发送和接收信息.一旦对象已经完成了任务,它就被作为无用信息被回收,它的资源可以由其它对象回收利

Visual C++.NET GDI+编程基础

GDI+提供从简单到复杂图形绘制的大量方法,并且我们可以通过对路径和区域的操作构造出更复杂的图形,这在CAD等场合极为有用.当然,在绘图之前我们有必要搞清一些基本内容,如坐标空间.画笔和画刷等. 坐标空间及其变换 在视图和窗口中绘图或定位总是在一个二维坐标系进行,依据作用方法的不同,坐标有多种表示方法,并且各种不同坐标之间可以相互转换. 1. 世界坐标系.设备坐标系和页面坐标系 GDI+为我们提供了三种坐标空间:世界坐标系.页面坐标系和设备坐标系. "世界坐标系"是应用程序用来进行图形

OpenGL编程轻松入门之坐标变换

本节中的例子仅仅是将第二节的例子作了一点点改动.将myDisplay函数中画三角型的那一部分提出来写成一个函数drawTriangle.然后在myDisplay函数中用drawTriangle():代替原来的语句.这时例3和例1完成的功能完全一样.而此时我们知道坐标的原点在窗口的中心.我们用glTranslate函数改变坐标的原点.同样glTranslate函数后的f和d表明参数的类型.其参数的含义和glVertex中参数的含义一样.坐标原点改变后,我们再调用一次drawTriangle():可

通过UIKit坐标系来全面掌握iOS中的UIScrollView组件_IOS

感谢UIKit的坐标系统特性,使我们之花了30几行代码就能重现UIScrollView的精华,当然真正的UIScrollView要比我们所做的复杂的多,反弹效果,动量滚动,放大试图,还有代理方法,这些特性我们没有在这里涉及到. 首先,让我们先来了解一下UIKit中的坐标系是怎么工作的.如果你只对滚动试图的代码实现感兴趣可以放心跳过下一小节.UIKit坐标系每一个View都定义了他自己的坐标系统.如下图所示,x轴指向右方,y轴指向下方: 注意这个逻辑坐标系并不关注包含在其中View的宽度和高度.整

CSS3 3D立方体效果-transform也不过如此

第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立方体的效果实例来深入了解css3的transform属性,下面是这个实例的截图,加上动画还能旋转起来哟,是不是很酷炫?换上你喜欢的女生的照片,就可以大胆的撩妹了,哈哈!想看效果看这里,3D立方体实例效果 初识transform 顾名思义:变换.就可以想到它可以做很多很多的事情了,这个属性有很多的值,在这里简单列举一下: transl

UIView如何管理它的子视图

UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.而setNeedsDisplay会调用自动调用drawRect方法,这样可以拿到UIGraphicsGetCurrentContext,就可以画画了.而setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据.宗上所诉,setNeedsDisplay方便绘图,而layoutSubViews方便出来数据. UIView提供了很多建立和管理视图的方法.

《ADOBE ILLUSTRATOR CS5标准培训教材》—第1章1.6节 关于标尺和参考线

1.6 关于标尺和参考线ADOBE ILLUSTRATOR CS5标准培训教材通过使用标尺和参考线,用户可以更精确地放置对象,用户也可以通过自定义的标尺和参考线为制图带来便利. 1.6.1 创建标尺参考线首先确定标尺处于显示状态,如果没有显示,可选择"视图>显示标尺"命令显示标尺. 在以前的一些版本中,标尺的原点在图像的右下角,但是到了Illustrator CS4,"打印"对话框中的"设置"选项组中的"拼贴"选项决定了

《ADOBE ILLUSTRATOR CC标准培训教材》—第1章1.6节关于标尺和参考线

1.6 关于标尺和参考线ADOBE ILLUSTRATOR CC标准培训教材通过使用标尺和参考线,用户可以更精确地放置对象,用户也可以通过自定义的标尺和参考线为制图带来便利. 1.6.1 创建标尺参考线首先确定标尺处于显示状态,如果没有显示,可选择"视图>显示标尺"命令显示标尺. 在以前的一些版本中,标尺的原点在图像的右下角,但是到了Illustrator CS4,"打印"对话框中的"设置"选项组中的"拼贴"选项决定了原