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); }}有点问题,绘制出来的效果不是我想要的,再请教。
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); }}
谢谢,你真聪明! 我可能没有说清楚,是我的错。我要的效果是,有点动态的感觉。把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;
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);
}}有点问题,绘制出来的效果不是我想要的,再请教。
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);
}}
我可能没有说清楚,是我的错。我要的效果是,有点动态的感觉。把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);
}}