我有一个执行自定义绘画的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........
}
}
}
}
最佳答案
除了有关事件调度线程的说法之外: