0

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 回実行される理由がわかりません (たとえば、if[1][2] と [2][3] がnull それは印刷されます:

    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] に要素が存在するにもかかわらず、描画されないことがあるため、これは描画にも影響すると思います (行列は 16 進数の行列です)。

後で編集: g.fill3DRect(i*side,k*side, side, side, true); ということは何とか可能ですか? 私はhexagon.DrawHexfromMatrix(g、i、k、Color.black)でペイントしようとしている六角形をオーバーペイントする;???

4

1 に答える 1

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

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

于 2011-11-09T16:26:55.143 に答える