2012-12-15 71 views
3

我有一個JApplet(MainClass extends JApplet),一個JPanel(ChartWindow extends JPanel)和一個Grafico類。在JPanel上的paintComponent,圖像閃爍然後消失

問題是,Grafico類實例有2個JPanel應該顯示2個圖像(每個面板1個),但圖像顯示,並在一小會兒後消失:而不是他們我得到一個灰色背景(如空的JPanel)。出現這種情況,每重繪()調用(即是在ChartWindow類製造)

的MainClass init()包含

chartwindow=new ChartWindow(); 
add(chartwindow) 

chartwindow具有畫報實例。

這是ChartWindow的

paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    Image immagineGrafico=createImage(grafico.pannelloGrafico.getWidth() 
      ,grafico.pannelloGrafico.getHeight()); 
    Image immagineVolumi=createImage(grafico.pannelloVolumi.getWidth() 
     ,grafico.pannelloVolumi.getHeight()); 
    Graphics2D imgGrafico=(Graphics2D)immagineGrafico.getGraphics(); 
    Graphics2D imgVolumi=(Graphics2D)immagineVolumi.getGraphics(); 
    grafico.draw(imgGrafico,imgVolumi,mouseX,mouseY); 

    ((Graphics2D)grafico.pannelloGrafico.getGraphics()).drawImage(immagineGrafico,0,0,this); 
    ((Graphics2D)grafico.pannelloVolumi.getGraphics()).drawImage(immagineVolumi,0,0,this); 
} 

畫報的JPanels都在ChartWindow的構造函數中添加這樣paintComponent(覆蓋)

grafico=new Grafico() 
................ 
add(grafico.pannelloGrafico); 
add(grafico.pannelloVolumi); 

告訴我,如果你需要更多的信息,非常感謝你:-)

+0

你最終如何閃爍? –

回答

2

如果你想繪製它們,你需要覆蓋JPanel的paintComponent而不是圖表窗口。會發生什麼是每當JPanel繪製自己的默認顏色將覆蓋您的圖像。

 class PanelloVolumi extends JPanel{ 
     //some code 

     public void paintComponent(Graphics g){ 

      //paint one image here 
     } 

    } 

並且對其他JPanel也做同樣的事情。

然後將這些JPanel的實例添加到您的Applet中。

+0

謝謝文森特。它工作,我已經解決了這個問題,但我看到閃爍。我所做的就是像以前一樣用grafico.draw()製作圖像,然後1)grafico.pannelloGrafico.setImg(immagineGrafico); 2)在PannelloVolumi的paintComponent中,我使用g.drawImage(img,0,0,this)繪製圖像; – mark

+0

聽起來不錯。閃爍可以用雙緩衝來固定。您使用的是哪個版本的Java? –

+0

http://javatester.org說我使用1.7.0_09好吧,在通過添加JPanel並使用paintComponent()代替舊paint()來搞亂代碼之前,雙緩衝工作正常。也許我錯過了什麼?我創建一個圖像(immagineGrafico),然後我得到它的graphics2D(與imgGrafico =(Graphics2D)immagineGrafico.getGraphics()),然後寫在它的繪製方法,然後我使用pannelloGrafico.setImg(immagineGrafico),設置圖像繪製。在這個PannelloGrafico的paintComponent(其中我使用g.drawImage(img ...))繪製圖像後,在面板中您Vincent – mark