我试图让这段代码制作一个在 y 轴上跟随鼠标的正方形。现在每次鼠标移动时它都会生成一个新的方 block 我该如何解决这个问题?
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.*;
public class Pong {
public static void main(String args[]) {
Frame f = new Frame("Pong");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(new PongField(Color.black), BorderLayout.CENTER);
f.setResizable(false);
f.pack();
f.setVisible(true);
}
}
class PongField extends Canvas {
boolean playing = true;
boolean running = true;
public PongField(Color mainscreen) {
setForeground(mainscreen);
}
public Dimension getPreferredSize() {
return new Dimension(600, 600);
}
public void paint(Graphics g) {
while (true) {
Dimension size = getSize();
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
a = MouseInfo.getPointerInfo();
b = a.getLocation();
int x = size.width / 2;
int y = (int) b.getY();
g.fillRect(x / x * 10, y, 10, 75);
g.drawLine(size.width / 2 - 5, 0, size.width / 2 - 5, size.height);
if (y != (int) b.getY())
y = (int) b.getY();
}
}
}
最佳答案
你不需要在paint()中使用循环——事实上,这是一件非常非常可怕的事情,因为否则它会卡住整个GUI(没有其他组件能够自行绘制!) “while”循环退出,只留下循环体。然后通过添加一个调用 repaint()
的 MouseMotionListener
来安排适本地调用 Paint()。在构造函数中,执行以下操作:
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseMoved(MouseEvent me) {
repaint();
}
});
应该可以了。现在只要鼠标移动,paint()就会被调用。系统会自动为您处理屏幕删除。
关于java - 重新画一个正方形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211775/