【问题标题】:Painting in Swing, blinking issue在 Swing 中绘画,闪烁问题
【发布时间】:2011-11-25 22:06:10
【问题描述】:

我在摇摆中遇到以下问题。
我正在实现基本的绘图操作(线条、形状)。当我按下左键移动鼠标时,我需要重新绘制当前形状。所以我清除屏幕并重新绘制已经绘制的形状并且当前正在绘制一个。
paint() 方法中绘制形状,在鼠标移动事件中我调用repaint()(自动调用paint())。问题是屏幕在每次重绘时都会强烈闪烁,看起来真的很难看。请告诉我,我做错了什么?谢谢。

【问题讨论】:

  • 请提供一个sscce,表明您描述的问题。

标签: java swing drawing paint repaint


【解决方案1】:

我想你要找的是double buffering

【讨论】:

  • Swing JPanel,例如,默认情况下会加倍缓冲。
【解决方案2】:

在paint()中绘制形状

自定义绘画应该在 paintComponent() 方法中完成,并确保调用 super.paintComponent() 作为第一行。

自定义绘制也是在 JPanel(或 JComponent)上完成的,而不是直接在 JFrame 上完成。

【讨论】:

    【解决方案3】:

    我有闪烁或闪烁的问题。我使用以下代码解决了它。

        public void update(Graphics g) {
           paint(g);
        }
    
        @Override
        public void paint(Graphics g) {
    
            //super.repaint();
            if (myimg != null) {
                g.drawImage(myimg, 0, 0, this);
            }
            //update(g);
        }
    

    【讨论】:

      【解决方案4】:

      你不需要清除屏幕,你只需调用 repaint() 就足够了。如果你必须清屏,如果你不使用同步,它会闪烁,因为绘画工作是在一个单独的线程中完成的。

      【讨论】:

        猜你喜欢
        • 2015-02-13
        • 2011-08-26
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 2017-09-15
        • 2016-07-25
        • 1970-01-01
        相关资源
        最近更新 更多