鼠标移动延迟重绘()

时间:2016-11-21 10:49:32

标签: java swing mouse repaint mousemotionlistener

我一直在编写一个球弹跳墙的项目,一切正常,除了当我将鼠标移动到绘图面板上足够快,重绘是滞后的。所以我在Edit 2中做了一个例子,那里也存在问题。为什么?我该如何解决或解决它?

编辑1: 这就是我的代码的样子:here
编辑2: 我创建了这个例子以使其更清晰。

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

import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class DrawingPanel extends JPanel
{
    public Ball ball;
    public DrawingPanel()
    {
        super();
        setPreferredSize(new Dimension(300, 100));
        setBackground(Color.black);
        this.ball = new Ball(10);
        this.ball.start();
    }
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Laggy ball");
        DrawingPanel panel = new DrawingPanel();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.add(panel);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
        while(true)
        {
            try
            {
                Thread.sleep(17);
            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            panel.repaint();
        }
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        ball.draw(g);
    }

    public class Ball extends Thread
    {
        public int position;
        public int velocity;
        public Ball(int velocity)
        {
            super();
            this.position = 0;
            this.velocity = velocity;
        }
        void draw(Graphics g)
        {
            g.setColor(Color.blue);
            g.fillOval(position, 50, 20, 20);
        }
        void update()
        {
            position += velocity;
            if(position > getWidth() || position < 0)
                velocity *= -1;
        }
        @Override
        public void run()
        {
            while(true)
            {
                try
                {
                    Thread.sleep(17);
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
                update();
            }
        }
    }
}

编辑3: 一个问题解决了。至少我知道问题不是代码而是我的笔记本电脑。

编辑4: 我注意到只有在使用外接鼠标时才会出现问题。否则一切都很好。这是一个本地问题,而不是代码。不过,谢谢你的帮助!

0 个答案:

没有答案