gpt4 book ai didi

java - 绘制东西时用鼠标移动时滞后

转载 作者:行者123 更新时间:2023-12-04 06:38:40 24 4
gpt4 key购买 nike

我在鼠标位置绘制矩形时遇到了一些麻烦。移动鼠标时,绘制的矩形滞后于鼠标光标。有没有办法确保矩形在鼠标上准确移动并且不落后?

这是一个小例子,虽然因为这只是一个矩形,所以滞后非常轻微,但它确实存在。在更大的程序中,我一次画了很多,但只移动了一个。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.*;

public class MouseTest {
JFrame window;
DrawPanel content;

public MouseTest(){
window = new JFrame("Test");
content = new DrawPanel();
window.setContentPane(content);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
window.pack();
}

public static void main (String[] args){
MouseTest test = new MouseTest();
}

private class DrawPanel extends JPanel implements MouseMotionListener {
int mouseX;
int mouseY;

private DrawPanel(){
setBackground(Color.BLUE);
setPreferredSize(new Dimension(400,400));
addMouseMotionListener(this);
}

public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(mouseX, mouseY, 20, 20);
}

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

}

@Override
public void mouseMoved(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
repaint();

}
}

}

最佳答案

即使这是更多的工作,我建议您只使已更改的区域无效并重新绘制任何此类任务。这将节省许多周期(想象一下一直在绘制完整的背景......)。

你会看到很大的改进。

编辑

我用这个例子自己测试过

    public void mouseMoved(MouseEvent e) {
repaint(mouseX, mouseY, 20, 20);
mouseX = e.getX();
mouseY = e.getY();
repaint(mouseX, mouseY, 20, 20);
}

并且必须承认这些改进有点学术性(至少对于我的计算机而言)。无论如何,这种技术应该用于更复杂的绘画方法..(你最终会看到改进)

编辑

还有更多作弊:如果您仍然不喜欢您认为光标所在的位置与系统所想的不匹配,请尝试关闭光标 (http://www.java2s.com/Code/Java/2D-Graphics-GUI/HidethemousecursoruseatransparentGIFasthecursor .htm) 为用户提供更好的反馈。

关于java - 绘制东西时用鼠标移动时滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4564651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com