保存一个Rect的对象数组 存有每一个Rect的矢量数据 鼠标每单击一下就遍历该数组 判断是选中的哪个 然后取鼠标初始位置和终止位置 改变选中的那个Rect的位置 要改变大小的话就要更复杂一些 有多复杂取决于你准备怎么定义改变Rect大小的鼠标操作

解决方案 »

  1.   

    比如fillRect在窗体上画出来多个~能用鼠标事件来对某一个进行拖拽和改变大小吗?如果能是怎么是实现的!把思路想清楚了。代码就能写出来。
    1。
      先把距形画出来,
      (每一个距形都是一个对象)
    2。
      每一个距形都能接受两个事件  拖拽和改变
      (根据鼠标移动的位置来监听事件)  
      

  2.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*; 
    public class draw extends JFrame {
    private int startX, startY, endX, endY;
    private Graphics og;
    private Image oimg;
    public draw(){
    this.addMouseMotionListener(new MouseMotionAdapter() {
    public void mouseDragged(MouseEvent me) {
    endX = me.getX();//鼠标拖动时的坐标
    endY = me.getY();
    repaint();//图形重绘

    });
    this.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent me) {
    startX = me.getX();//鼠标按下时的坐标
    startY = me.getY();
    }
    public void mouseReleased(MouseEvent arg0) {
    og.drawRect(startX, startY, endX-startX,endY-startY);//加一条直线至内存Graphics

    });
    this.setTitle("lele天空java编程");
    this.setBounds(0, 0, 400, 400);//确定窗体在屏幕上的大小
    this.setResizable(true);//窗体大小框显示(true)
    this.setVisible(true);//窗体显示(true)
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体
    this.setLocation(0,0);//窗体在屏幕上的位置为(0,0)
    oimg = createImage(800, 600);
    og = oimg.getGraphics(); 
    }
    public void paint(Graphics g) {
    super.paint(g);
    g.drawImage(oimg, 0, 0, this);//先把之前保存在内存的Image画上
    g.drawRect(startX, startY, endX-startX, endY-startY);//进行绘图 
    }
    public static void main(String[] args) {
    new draw();
    }
    }
      

  3.   

    http://topic.csdn.net/u/20100107/22/89048adb-ef00-44f3-ad7f-59ee4c91dd7b.html?seed=1697807057&r=62557317#r_62557317
      

  4.   

    做了个,楼主可以试下,可以拖拽,可以改变大小。
    import java.awt.BasicStroke;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Cursor;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.awt.Stroke;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;import javax.swing.JFrame;
    import javax.swing.JPanel;public class RectangleFrame{
    public static void main(String[] args){
    JFrame frame = new JFrame("Test Drag Rectangle");
    Container c = frame.getContentPane();
    c.setLayout(new BorderLayout());
    JPanel rectPanel = new RectanglePanel();
    c.add(rectPanel,BorderLayout.CENTER);
    frame.setBounds(200,150,500,300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }

    }
      

  5.   

    class RectanglePanel extends JPanel implements MouseListener,MouseMotionListener{
    public static final Integer NEW_RECTANGLE = new Integer(0);
    public static final Integer DRAG_RECTANGLE = new Integer(1);
    public static final Integer RESIZE_RECTANGLE = new Integer(2);
    private int pressedX;
    private int pressedY;

    private List<RectEntry> rectList = new ArrayList<RectEntry>();

    private Integer operateType;
    private RectEntry draggingRect;
    private RectEntry newingRect;
    private RectEntry resizingRect;
    private int startX;
    private int startY;
    private Random colorRandom = new Random();
    public RectanglePanel(){
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    }
    public void paintComponent(Graphics g){
    Color bgColor = this.getBackground();
    g.setColor(bgColor);
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    for(int i=rectList.size()-1;i>=0;i--){
    RectEntry rectEntry = rectList.get(i);
    Rectangle rect = rectEntry.getRect();
    Color drawColor = rectEntry.getDrawColor();
    g.setColor(drawColor);
    g.drawRect(rect.x, rect.y, rect.width, rect.height);
    Color fillColor = rectEntry.getFillColor();
    g.setColor(fillColor);
    g.fillRect(rect.x, rect.y, rect.width, rect.height);
    }
    if(draggingRect != null){
    Graphics2D g2d = (Graphics2D)g;
    Stroke oldStroke = g2d.getStroke();
    g2d.setStroke(new BasicStroke(1.0f,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_MITER,10.0f,new float[]{2,2},0));
    Rectangle rect = draggingRect.getRect();
    Color drawColor = draggingRect.getDrawColor();
    g.setColor(drawColor);
    g.drawRect(rect.x, rect.y, rect.width, rect.height);
    g2d.setStroke(oldStroke);
    }
    if(newingRect != null){
    Graphics2D g2d = (Graphics2D)g;
    Stroke oldStroke = g2d.getStroke();
    g2d.setStroke(new BasicStroke(1.0f,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_MITER,10.0f,new float[]{2,2},0));
    Rectangle rect = newingRect.getRect();
    Color drawColor = newingRect.getDrawColor();
    g.setColor(drawColor);
    g.drawRect(rect.x, rect.y, rect.width, rect.height);
    g2d.setStroke(oldStroke);
    }
    if(resizingRect != null){
    Graphics2D g2d = (Graphics2D)g;
    Stroke oldStroke = g2d.getStroke();
    g2d.setStroke(new BasicStroke(1.0f,BasicStroke.CAP_SQUARE,BasicStroke.JOIN_MITER,10.0f,new float[]{2,2},0));
    Rectangle rect = resizingRect.getRect();
    Color drawColor = resizingRect.getDrawColor();
    g.setColor(drawColor);
    g.drawRect(rect.x, rect.y, rect.width, rect.height);
    g2d.setStroke(oldStroke);
    }
    }
      

  6.   

    public void mouseDragged(MouseEvent e) {
    if(operateType == DRAG_RECTANGLE){
    int draggedX = e.getX();
    int draggedY = e.getY();
    int moveX = draggedX-pressedX;
    int moveY = draggedY-pressedY;
    Rectangle rect = draggingRect.getRect();
    int w = rect.width;
    int h = rect.height;
    rect.setBounds(startX+moveX, startY+moveY, w, h);
    this.repaint();
    }else if(operateType == NEW_RECTANGLE){
    int x = pressedX;
    int y = pressedY;
    int draggedX = e.getX();
    int draggedY = e.getY();
    Rectangle rect = newingRect.getRect();
    Rectangle locationRect = new Rectangle();

    if(draggedX-x>0){
    locationRect.x = x;
    locationRect.width = draggedX-x;
    if(draggedY-y>0){
    locationRect.y = y;
    locationRect.height = draggedY-y;
    }else{
    locationRect.y = draggedY;
    locationRect.height = y-draggedY;
    }
    }else{
    locationRect.x = draggedX;
    locationRect.width = x-draggedX;
    if(draggedY-y>0){
    locationRect.y = y;
    locationRect.height = draggedY-y;
    }else{
    locationRect.y = draggedY;
    locationRect.height = y-draggedY;
    }
    }
    rect.setBounds(locationRect);
    this.repaint();
    }else if(operateType == RESIZE_RECTANGLE){
    int x = startX;
    int y = startY;
    int draggedX = e.getX();
    int draggedY = e.getY();
    Rectangle rect = resizingRect.getRect();
    Rectangle locationRect = new Rectangle();

    if(draggedX-x>0){
    locationRect.x = x;
    locationRect.width = draggedX-x;
    if(draggedY-y>0){
    locationRect.y = y;
    locationRect.height = draggedY-y;
    }else{
    locationRect.y = draggedY;
    locationRect.height = y-draggedY;
    }
    }else{
    locationRect.x = draggedX;
    locationRect.width = x-draggedX;
    if(draggedY-y>0){
    locationRect.y = y;
    locationRect.height = draggedY-y;
    }else{
    locationRect.y = draggedY;
    locationRect.height = y-draggedY;
    }
    }
    rect.setBounds(locationRect);
    this.repaint();
    }

    } public void mouseMoved(MouseEvent e) {

    } public void mouseClicked(MouseEvent e) {

    } public void mouseEntered(MouseEvent e) {

    } public void mouseExited(MouseEvent e) {

    }
      

  7.   

    public void mousePressed(MouseEvent e) {
    pressedX = e.getX();
    pressedY = e.getY();
    Object[] results = pointInRect(pressedX,pressedY);
    operateType = (Integer)results[0];
    if(operateType == DRAG_RECTANGLE){
    RectEntry rectsAtPoint = (RectEntry)results[1];
    draggingRect = rectsAtPoint;
    newingRect = null;
    resizingRect = null;
    Rectangle rect = draggingRect.getRect();
    startX = rect.x;
    startY = rect.y;

    rectList.remove(draggingRect);

    }else if(operateType == NEW_RECTANGLE){
    draggingRect = null;
    resizingRect = null;
    Color fillColor = new Color(colorRandom.nextInt(256),colorRandom.nextInt(256),colorRandom.nextInt(256));
    Color drawColor = new Color(colorRandom.nextInt(256),colorRandom.nextInt(256),colorRandom.nextInt(256));
    newingRect = new RectEntry(new Rectangle(pressedX,pressedY,0,0),fillColor,drawColor);

    }else if(operateType == RESIZE_RECTANGLE){
    RectEntry rectsAtPoint = (RectEntry)results[1];
    resizingRect = rectsAtPoint;
    draggingRect = null;
    newingRect = null;
    Rectangle rect = resizingRect.getRect();
    startX = rect.x;
    startY = rect.y;
    rectList.remove(resizingRect);
    this.setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
    }
    } public void mouseReleased(MouseEvent e) {
    if(operateType == DRAG_RECTANGLE){
    int releasedX = e.getX();
    int releasedY = e.getY();
    int moveX = releasedX-pressedX;
    int moveY = releasedY-pressedY;
    Rectangle rect = draggingRect.getRect();
    int w = rect.width;
    int h = rect.height;
    rect.setBounds(startX+moveX, startY+moveY, w, h);
    rectList.add(0, draggingRect);
    this.repaint();
    }else if(operateType == NEW_RECTANGLE){
    int x = pressedX;
    int y = pressedY;
    Rectangle rect = newingRect.getRect();

    int releasedX = e.getX();
    int releasedY = e.getY();

    Rectangle locationRect = new Rectangle();

    if(releasedX-x>0){
    locationRect.x = x;
    locationRect.width = releasedX-x;
    if(releasedY-y>0){
    locationRect.y = y;
    locationRect.height = releasedY-y;
    }else{
    locationRect.y = releasedY;
    locationRect.height = y-releasedY;
    }
    }else{
    locationRect.x = releasedX;
    locationRect.width = x-releasedX;
    if(releasedY-y>0){
    locationRect.y = y;
    locationRect.height = releasedY-y;
    }else{
    locationRect.y = releasedY;
    locationRect.height = y-releasedY;
    }
    }
    rect.setBounds(locationRect);
    rectList.add(0, newingRect);
    this.repaint();
    }else if(operateType == RESIZE_RECTANGLE){
    int x = startX;
    int y = startY;
    Rectangle rect = resizingRect.getRect();

    int releasedX = e.getX();
    int releasedY = e.getY();

    Rectangle locationRect = new Rectangle();

    if(releasedX-x>0){
    locationRect.x = x;
    locationRect.width = releasedX-x;
    if(releasedY-y>0){
    locationRect.y = y;
    locationRect.height = releasedY-y;
    }else{
    locationRect.y = releasedY;
    locationRect.height = y-releasedY;
    }
    }else{
    locationRect.x = releasedX;
    locationRect.width = x-releasedX;
    if(releasedY-y>0){
    locationRect.y = y;
    locationRect.height = releasedY-y;
    }else{
    locationRect.y = releasedY;
    locationRect.height = y-releasedY;
    }
    }
    rect.setBounds(locationRect);
    rectList.add(0, resizingRect);
    this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    this.repaint();
    }
    operateType = null;
    draggingRect = null;
    newingRect = null;
    }
      

  8.   

    public Object[] pointInRect(int x,int y){
    Integer type = NEW_RECTANGLE;
    Object[] results = new Object[2];
    RectEntry containePointRectEntry = null;
    for(int i=0;i<rectList.size();i++){
    RectEntry rectEntry = rectList.get(i);
    Rectangle rect = rectEntry.getRect();
    if(rect.contains(x, y)){
    Rectangle temp = new Rectangle();
    temp.x = rect.x;
    temp.y = rect.y;
    temp.width = rect.width-5;
    temp.height = rect.height-5;
    if(temp.contains(x, y)){
    type = DRAG_RECTANGLE;
    }else{
    type = RESIZE_RECTANGLE;
    }
    containePointRectEntry = rectEntry;
    break;
    }
    }
    results[0] = type;
    results[1] = containePointRectEntry;
    return results;
    }
    }
    class RectEntry{
    private Rectangle rect;
    private Color fillColor;
    private Color drawColor;
    public RectEntry(Rectangle rect,Color fillColor,Color drawColor){
    this.rect = rect;
    this.fillColor = fillColor;
    this.drawColor = drawColor;
    }
    public Rectangle getRect() {
    return rect;
    }
    public void setRect(Rectangle rect) {
    this.rect = rect;
    }
    public Color getFillColor() {
    return fillColor;
    }
    public void setFillColor(Color fillColor) {
    this.fillColor = fillColor;
    }
    public Color getDrawColor() {
    return drawColor;
    }
    public void setDrawColor(Color drawColor) {
    this.drawColor = drawColor;
    }


    }
      

  9.   

        private RectEntry draggingRect;
        private RectEntry newingRect;
        private RectEntry resizingRect;这个三个是什么?
      

  10.   

    你的代码我看了好几个地方没看明白(我是新的不能在新的新手~),其实我想要一个像画板一样的程序~能在上面画圆,矩形,线,三角等等~都是可以拖拽改变大小的~我试着在你给的程序改了一下!没有该明白~比如我一开始花了个矩形,等我在画圆的时候一开始的矩形也变成了圆形!颜色也是同样的问题!我用的是JColorChooser给的颜色!huangwj20042008大哥要是有时间就帮忙改一下好么?要是真的没时间~给点提示也可以!总之现在这些谢谢~帖子我已经结了不知道你还能不能看见!!!