2011-11-09 49 views
0

是否有一個常見的原因,爲什麼paint()方法可能被調用兩次而沒有打算。我有以下代碼:java applet中的paint()無故被調用兩次

public void paint(Graphics g) 
{ 
    //Graphics2D gg; 
    //gg=(Graphics2D) g; 

    drawMatrix(g); 

} 

     private void drawMatrix(Graphics g) { 

     int side = 40; 
     hex hexagon=new hex(); 
     for(int i = 0; i<9; i++) 
      for(int k = 0; k<9; k++){ 

      g.setColor(Color.lightGray); 
      g.fill3DRect(i*side,k*side, side, side, true); 
      if (matrix[i][k]!=null){System.out.println("i is "+i+" k is "+k); 
       g.setColor(Color.black);hexagon.DrawHexfromMatrix(g, i, k, Color.black);} 
    } 
    } 

六角是延伸多邊形(以六邊形圖形模型)的一類,並且DrawHexfromMatrix是,從被吸入的矩陣的索引繪製一個六邊形的功能(把矩陣的槽中的六邊形)。如果你認爲它有幫助,我可以提供整個代碼,但現在我不明白爲什麼system.out.println會執行兩次(例如,如果[1] [2]和[2] [3]不是空它將打印:

i is 1 k is 2 
    i is 2 k is 3 
    i is 1 k is 2 
    i is 2 k is 3 

我想是因爲有時儘管元素存在於[i]是不是繪製[K]這也影響了我的畫(矩陣是十六進制的矩陣)

後來編輯:它有可能以某種方式,g.fill3DRect(我*側,K *側,側,側,真);覆蓋我試圖用六角形繪製的六角形DrawHexfromMatrix(g,i,k,Color .black); ???

回答

4

首先,你應該不直接畫到JApplet

您應該定義一個JPanel,將其添加到JApplet。你畫到JPanel

其次,您應該使用paintComponent()方法,並像這樣調用超類的行爲。

protected void paintComponent(Graphics g) { 
    // Paint the default look. 
    super.paintComponent(g); 

    // Your custom painting here. 
    g.drawImage(foregroundImage, x, y, this); 
} 

第三,當Swing觸發paintComponent()方法時,您無法控制。您應該使用其他方法進行計算,並將paintComponent()中的代碼限制爲實際繪圖方法。