java的画图的小问题、、
我想画一幅画 然后定义相对坐标 当相对坐标移动时 那副画会整体移动、、、该怎么实现、、、
package com.tur.demo;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Rectangle2D;
public class Hello extends JPanel {
private Rectangle2D imageBoundingRect; // 图像的矩形区
private Point mousePressedPos; // 鼠标按下的位置
private boolean imageSelected = false; // 图像被选中
private Image image;
public Hello() {
imageBoundingRect = new Rectangle2D.Double(10, 10, 150, 150);
mousePressedPos = new Point();
image = new ImageIcon("/Users/Biao/Desktop/x.png").getImage();
MyMouseAdapter ma = new MyMouseAdapter();
addMouseListener(ma);
addMouseMotionListener(ma);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
// 在此矩形框内绘制图像
g2d.drawImage(image,
(int) imageBoundingRect.getX(),
(int) imageBoundingRect.getY(),
(int) imageBoundingRect.getWidth(),
(int) imageBoundingRect.getHeight(),
this);
if (imageSelected) {
// 图像被选中时高亮边框
g2d.setColor(Color.RED);
g2d.draw(imageBoundingRect);
}
}
private static void createGuiAndShow() {
JFrame frame = new JFrame("");
// TODO add component.
frame.getContentPane().add(new Hello());
// Set frame's close operation and location in the screen.
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
class MyMouseAdapter extends MouseAdapter {
@Override
public void mousePressed(MouseEvent event) {
if (imageBoundingRect.contains(event.getPoint())) {
imageSelected = true;
mousePressedPos.setLocation(event.getX(), event.getY());
repaint();
}
}
@Override
public void mouseReleased(MouseEvent event) {
imageSelected = false;
repaint();
}
@Override
public void mouseDragged(MouseEvent event) {
if (imageSelected) {
// 当图像被选中且拖动时,修改图像对应的矩形区域的左上角的坐标.
int deltaX = event.getX() - mousePressedPos.x;
int deltaY = event.getY() - mousePressedPos.y;
imageBoundingRect.setFrame(imageBoundingRect.getX() + deltaX,
imageBoundingRect.getY() + deltaY,
imageBoundingRect.getWidth(),
imageBoundingRect.getHeight());
mousePressedPos.setLocation(event.getX(), event.getY());
repaint();
}
}
}
public static void main(String[] args) {
createGuiAndShow();
}
}
