在panel上,鼠标按下挪动,松开画一个矩形,矩形的位置是鼠标按下和松开的位置。意思就是动态的绘制一个矩形。
请各位高手指教一下

解决方案 »

  1.   


    import java.awt.Graphics;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;
    import javax.swing.JPanel;public class Test extends JPanel { private static final long serialVersionUID = 1L;

    private int x;
    private int y;
    private int startX;
    private int startY;
    private int endX;
    private int endY; public Test() { this.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
    startX = x = endX = e.getPoint().x;
    startY = y = endY = e.getPoint().y;
    } public void mouseReleased(MouseEvent e) {
    endX = e.getPoint().x;
    endY = e.getPoint().y;
    Graphics g = getGraphics(); g.drawRect(startX, startY, endX - startX, endX - startY);
    }
    });

    this.addMouseMotionListener(new MouseMotionAdapter() {
    public void mouseDragged(MouseEvent e) {
    x = e.getPoint().x;
    y = e.getPoint().y; Graphics g = getGraphics(); g.drawRect(startX, startY, x - startX, y - startY);
    g.drawRect(startX, startY, x - startX, y - startY);
    } public void mouseMoved(MouseEvent e) {
    x = e.getX();
    y = e.getY();
    }
    });
    } public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(new Test());
    f.setSize(400, 400);
    f.setLocation(200, 200);
    f.setVisible(true);
    }}有点问题,绘制出来的效果不是我想要的,再请教。
      

  2.   


    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;
    import javax.swing.JPanel;public class Test extends JPanel {    private static final long serialVersionUID = 1L;
        
        private int x;
        private int y;
        private int startX;
        private int startY;
        private int endX;
        private int endY;    public Test() {        this.addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
    //                startX = x = endX = e.getPoint().x;
    //                startY = y = endY = e.getPoint().y;
                    startX = e.getPoint().x;
                    startY = e.getPoint().y;
                    endX = e.getPoint().x;
                    endY = e.getPoint().y;
                }            public void mouseReleased(MouseEvent e) {
                    endX = e.getPoint().x;
                    endY = e.getPoint().y;
                    Graphics g = getGraphics();
                    g.drawRect(startX, startY, endX - startX, endY - startY);
                }
            });
            
            /*this.addMouseMotionListener(new MouseMotionAdapter() {
                public void mouseDragged(MouseEvent e) {
                    x = e.getPoint().x;
                    y = e.getPoint().y;                Graphics g = getGraphics();                g.drawRect(startX, startY, x - startX, y - startY);
                    g.drawRect(startX, startY, x - startX, y - startY);
                }            public void mouseMoved(MouseEvent e) {
                    x = e.getX();
                    y = e.getY();
                }
            });*/
        }    public static void main(String[] args) {
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.getContentPane().add(new Test());
            f.setSize(400, 400);
            f.setLocation(200, 200);
            f.setVisible(true);
        }}
      

  3.   

    谢谢,你真聪明!
    我可能没有说清楚,是我的错。我要的效果是,有点动态的感觉。把MouseMotionAdapter去掉是可以的,但是没有效果了。
    也谢谢大家的指点。就此结贴了。以下代码,以实现我的需求。import java.awt.Graphics;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;import javax.swing.JFrame;
    import javax.swing.JPanel;public class Test extends JPanel { private static final long serialVersionUID = 1L;

    private int x;
    private int y;
    private int startX;
    private int startY;
    private int endX;
    private int endY;
    private Test instance; public Test() {
    instance = this;
    this.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
    startX = e.getPoint().x;
                    startY = e.getPoint().y;
                    endX = e.getPoint().x;
                    endY = e.getPoint().y;
    } public void mouseReleased(MouseEvent e) {
    endX = e.getPoint().x;
    endY = e.getPoint().y;

    Graphics g = getGraphics();
    g.drawRect(startX, startY, endX - startX, endY - startY);
    }
    });

    this.addMouseMotionListener(new MouseMotionAdapter() {
    public void mouseDragged(MouseEvent e) {
    x = e.getPoint().x;
    y = e.getPoint().y; Graphics g = getGraphics();
    g.clearRect(0, 0, instance.getWidth(), instance.getHeight());
    g.drawRect(startX, startY, x - startX, y - startY);
    } public void mouseMoved(MouseEvent e) {
    x = e.getX();
    y = e.getY();
    }
    });
    } public static void main(String[] args) {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(new Test());
    f.setSize(400, 400);
    f.setLocation(200, 200);
    f.setVisible(true);
    }}