我有一個JPanel自定義繪畫執行可能需要長達15秒。畫一個JPanel隱藏菜單
的問題是,當我點擊菜單上,而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........
}
}
}
}
你的線程可能是這裏的問題 - 如果你不這樣做所有在美國東部時間油畫,然後你要求麻煩/怪癖,如硫秒。如果使用'SwingUtilities.invokeLater()',問題是否仍然存在? – berry120 2013-03-07 17:23:37
'Graphics g = getGraphics();'是問題的另一部分。您應該考慮替換「BufferedImage」(顯示在「JLabel」中)的整個繪畫表面,並將長時間運行的工作轉移到「SwingWorker」。 – 2013-03-07 17:40:15
@ berry120如果我使用SwingUtilities.invokeLater(randomIFSPanelRenderer)而不是randomIFSPanelRenderer.start(),則窗口在調整大小時將變得無法響應。 – Ranjith 2013-03-08 10:33:30