java - 重新画一个正方形?

标签 java drawing mouse awt paint

我试图让这段代码制作一个在 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/

相关文章:

java - 安全异常 : BC provider not installed

javascript - 从小的 Three.js 视口(viewport)中选取对象

c# - Direct2D 模糊渲染

ios - 提高绘图性能(针对 Dudel 应用程序)

macos - NSEvent 和魔术鼠标

c++ - Visual Studio C++ 控制台操纵杆

java - 无法通过 Netty 从服务器向客户端发送消息

java - 如何从单个方法返回两个不同的类

java - 角度转换为弧度,然后转换为 dx。没有像我想象的那样工作

math - 如何从鼠标手势生成的点列表中确定所有线段?