新手一个,学习用鼠标拖拽画矩形,但总是出现不一致的情况,代码如下

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Demo3 extends JFrame{
MyJPanel3 mp;

public static void main(String[] args) {
// TODO Auto-generated method stub
new Demo3();

}

public Demo3()
{
mp=new MyJPanel3();
this.add(mp);
this.addMouseListener(mp);
this.addKeyListener(mp);
this.addMouseMotionListener(mp);
this.addWindowListener(mp);

this.setSize(400,300);
this.setVisible(true);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
}

class MyJPanel3 extends JPanel implements WindowListener,MouseListener,KeyListener,MouseMotionListener
{
int startx,starty,endx,endy;

public void paint(Graphics g)
{
super.paint(g);
if (endx>=startx && endy>=starty)
{
g.drawRect(startx,starty, endx-startx, endy-starty);
}
else if (endx>=startx && endy<=starty)
{
g.drawRect(startx,endy, endx-startx, starty-endy);
}
else if (endx<=startx && endy<=starty)
{
g.drawRect(endx,endy, startx-endx, starty-endy);
}
else
{
g.drawRect(endx,starty, startx-endx, endy-starty);
}
}

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠标点击了位置:("+e.getX()+","+e.getY()+")");
}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
startx=e.getX();
starty=e.getY();
}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
endx=e.getX();
endy=e.getY();
repaint();
}

@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println(e.getKeyChar()+"键被按下");
}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
endx=e.getX();
endy=e.getY();
repaint();
}

@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("窗口已被关闭");
}

@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub

}
}