RandomIFSPanelRenderer

RandomIFSPanelRenderer

我有一个执行自定义绘画的JPanel,可能要花费15秒。

问题是,当我在绘制JPanel的同时单击菜单时,正在菜单上进行绘制,并且选项不可见。 (请参见图片中变形的文字)

如果在绘制完成后单击菜单,则不会有任何不良行为,但是当我将鼠标指针移到另一个菜单上时,会再次发生相同的情况。
例如,绘画完成后,如果单击“应用程序”,则不会发生副作用,但是当我将鼠标指针移到“帮助”上时,就会表现出上述行为。
如何避免这种情况?

我在单独的线程中的paintComponent()方法外部执行绘画:

public class RandomIFSPanel extends JPanel {

  RandomIFSPanelRenderer randomIFSPanelRenderer;

 @Override
    public void paintComponent(Graphics graphics) {
        try {
            randomIFSPanelRenderer.stop();
        } catch (Exception e) {
        }
randomIFSPanelRenderer = new RandomIFSPanelRenderer();
   randomIFSPanelRenderer.start();
}

    class RandomIFSPanelRenderer extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < numberOfPoints; i++) {
                Graphics g=getGraphics();
             g.setColor(Color.WHITE);
               g.drawLine........
            }
        }
    }

}

最佳答案

除了有关事件调度​​线程的说法之外:

  • 您是否直接调用paintComponent()方法?调用repaint()是“安全的”。
  • 是否可以缓冲图像,绘制图像,然后在调用paintComponent()时在面板上进行设置?
  • 10-02 12:41