2011-11-09 2 views
0

paint()メソッドが意図せずに2回呼び出される一般的な理由はありますか?Javaアプレットのpaint()が何の理由もなく2回呼び出されました

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);} 
    } 
    } 

Hexはポリゴンを(六角姿をモデル化するために)拡張するクラスで、DrawHexfromMatrixが描かれている行列のインデックスからの六角形を描画する機能である(置く:私は、次のコードを持っていますマトリックスのスロット内の六角形)。あなたがそれが役に立ったと思うなら、私は全体のコードを提供することができますが、今はsystem.out.printlnがなぜ2回実行されるのか分かりません(例えば[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(i * side、k * side、side、side、true);私がhexagon.DrawHexfromMatrix(g、i、k、Color)でペイントしようとしている六角形を上書きすることは可能ですか? .black);

答えて

4

まず、 JAppletに直接ペイントしないでください。

JAppletに追加されるJPanelを定義する必要があります。あなたはJPanelにペイントします。

第2に、paintComponent()メソッドを使用し、このようなスーパークラスの動作を呼び出す必要があります。

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

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

第3に、SwingがpaintComponent()メソッドを起動するタイミングを制御できません。他の方法で計算し、paintComponent()のコードを実際の描画方法に限定する必要があります。

関連する問題