如何改变affinetransform的原点 使用affinetransform进行图像的拖动时,鼠标的位置总是处于图像的左上角。如何改变鼠标的位置,使得鼠标可以点中图像中的任意位置而进行拖动? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下面的程序也体现了这个问题,不管当鼠标点中正方形的哪个部分,当拖动时,正方形自动跳到鼠标的右下角。import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Point;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.geom.AffineTransform;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import java.awt.geom.Point2D.Double;import javax.swing.JFrame;import javax.swing.JPanel;public class AffineTest extends JFrame { /** * */ private static final long serialVersionUID = 1L; public Rectangle2D.Double rect = new Rectangle2D.Double(30,50,60,60); public double movex = 0 ,movey = 0; Point2D clickPoint = new Point2D.Double(0,0); public AffineTest() { this.setSize(600,600); this.setLocationRelativeTo(null); this.add(new DrawingPanel()); this.setVisible(true); } private class DrawingPanel extends JPanel { public DrawingPanel() { this.addMouseListener(new panelListener()); this.addMouseMotionListener(new panelListener()); } public void paintComponent(Graphics g) { super.paintComponent(g); AffineTransform tx = new AffineTransform(); if( rect.contains((Point2D.Double)clickPoint)) { tx.translate(movex, movey); } Graphics2D g2d = (Graphics2D)g; g2d.setTransform(tx); g2d.draw(rect); repaint(); } } private class panelListener implements MouseListener,MouseMotionListener { @Override public void mouseClicked(MouseEvent e) { clickPoint.setLocation(e.getX(), e.getY()); repaint(); } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseDragged(MouseEvent arg0) { movex = arg0.getX(); movey = arg0.getY(); } @Override public void mouseMoved(MouseEvent arg0) { // TODO Auto-generated method stub } } public static void main(String [] args) { new AffineTest(); } } 新手请教关于输入输出流的问题 知道了对象的名字,能否得到这个对象的实例? java问题求解 关于定时的程序 返回字符串数组的问题 如何启动tomcat?请教 重写。。。。调试通过,编译怎么会出现这种情况呢? 新年好!元旦了还在加班,就是因为一个java mail的问题.请高手指点!! 手机游戏用什么来编更好呢?? 初学者求教 Java 、Struts 、Asp.net三大版本代码生成器,要的快去下载吧! 关于JXTA中MessageImpl类和MessageElementImpl类的问题
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.Point2D.Double;import javax.swing.JFrame;
import javax.swing.JPanel;public class AffineTest extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L; public Rectangle2D.Double rect = new Rectangle2D.Double(30,50,60,60);
public double movex = 0 ,movey = 0;
Point2D clickPoint = new Point2D.Double(0,0);
public AffineTest()
{
this.setSize(600,600);
this.setLocationRelativeTo(null);
this.add(new DrawingPanel());
this.setVisible(true);
}
private class DrawingPanel extends JPanel
{
public DrawingPanel()
{
this.addMouseListener(new panelListener());
this.addMouseMotionListener(new panelListener());
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
AffineTransform tx = new AffineTransform();
if( rect.contains((Point2D.Double)clickPoint))
{
tx.translate(movex, movey);
}
Graphics2D g2d = (Graphics2D)g;
g2d.setTransform(tx);
g2d.draw(rect);
repaint();
}
}
private class panelListener implements MouseListener,MouseMotionListener
{ @Override
public void mouseClicked(MouseEvent e) {
clickPoint.setLocation(e.getX(), e.getY());
repaint();
} @Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
} @Override
public void mouseDragged(MouseEvent arg0) {
movex = arg0.getX();
movey = arg0.getY();
} @Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
public static void main(String [] args)
{
new AffineTest();
}
}