小弟是菜鸟,自学java,现在有个问题一直解决不了,求各位高手帮助!我已经画好了一个矩形,如何能实现用鼠标拖动到面板上的任意位置呢?
import java.awt.*;
import java.awt.event.*;
public class JX extends Frame {
public void paint(Graphics g){
g.drawRect(50,50,100,100);
}
public static void main (String[] args) {
JX p = new JX();
p.setSize(400,400);
p.setVisible(true);
p.addWindowListener(new WindowAdapter(){
@Override
    public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}

解决方案 »

  1.   

    改写paint函数,drawRect时使用rectangle的位置和高矮来确定画的位置,定义两个成员变量来保存位置,给Frame增加MouseDrag监听,在事件处理中修改变量,并重绘Frame
      

  2.   

    下面是我做的一个试验,没有限制矩形出界,可能会画到Frame外面去找不到,呵呵
    import java.awt.Color;
    import java.awt.Frame;
    import java.awt.Graphics;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;public class MoveRectangle extends Frame implements MouseMotionListener,MouseListener { private static final int WIDTH = 20;
    private static final int HEIGHT = 30; private int x, y;
    private boolean canMove;
    private int dX, dY; public static void main(String[] args) {
    // TODO Auto-generated method stub
    new MoveRectangle().setVisible(true); } public MoveRectangle() {
    x = 100;
    y = 150;
    canMove = false;
    this.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent arg0) {
    System.exit(0);
    }
    });
    this.addMouseMotionListener(this);
    this.addMouseListener(this);
    this.setSize(400, 300);
    } @Override
    public void paint(Graphics g) {
    // TODO Auto-generated method stub
    Color c = g.getColor();
    g.setColor(this.getBackground());
    g.fillRect(0, 0, this.getWidth(), this.getHeight());
    g.setColor(new Color(255, 0, 0));
    g.drawRect(x, y, WIDTH, HEIGHT);
    g.setColor(c);
    } @Override
    public void mouseDragged(MouseEvent me) {
    // TODO Auto-generated method stub
    if (canMove) {
    int mX = me.getX();
    int mY = me.getY();
    x = mX - dX;
    y = mY - dY;
    //repaint();
    paint(this.getGraphics());
    }
    }

    @Override
    public void mousePressed(MouseEvent me) {
    // TODO Auto-generated method stub
    if (me.getButton() == MouseEvent.BUTTON1) {
    int mX = me.getX();
    int mY = me.getY();
    if (mX >= x && mX <= x + WIDTH && mY >= y && mY <= y + HEIGHT) {
    dX = mX - x;
    dY = mY - y;
    canMove = true;
    }
    }
    } @Override
    public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub
    canMove = false;
    } @Override
    public void mouseMoved(MouseEvent me) {
    } @Override
    public void mouseClicked(MouseEvent arg0) {
    } @Override
    public void mouseEntered(MouseEvent arg0) {
    } @Override
    public void mouseExited(MouseEvent arg0) {
    }}