1

クラスと階層を使用して、Javaでペイントを作成しようとしています。しかし、私のペイント領域は背景色(白として定義)を取得しておらず、クリックすると、描画のjpanel領域に印刷画面が表示されます。super.paintComponent(g)を使用すると、インターフェイスは正常に表示されますが、毎回1ポイントしか取得できません。super.paintComponents(g)を使用すると、jpanel領域にフレームが印刷されます。

何が起こっているのかについて何か考えはありますか?

public class MandaDesenhar extends JPanel
{
static int x;
static int y;

private static final long serialVersionUID = 1L;
int i = 0;

public void paintComponent(Graphics g)
{   
    super.paintComponents(g);

    if (Paint4Fun.lista.size() == 0)
        return;

    while (i<Paint4Fun.lista.size())
    {
        FormaPrimitiva forma = Paint4Fun.lista.get(i);
        forma.desenha(g);
        i++;
    }
}
4

1 に答える 1

3

メソッドの外部ではなくi、メソッド内でローカルに定義し、そこで初期化する必要があります。paintComponent0

それ以外の場合は、常にリストの新しい要素のみをペイントし、古い要素はペイントしません。

編集: forループとしてループをより適切に書くことができます:

for(int i = 0; i < Paint4Fun.lista.size(); i++) {
   FormaPrimitiva forma = Paint4Fun.lista.get(i);
   forma.desenha(g); 
}

またはさらに明確に:

for(FormaPrimitiva forma : Paint4Fun.lista) {
    forma.desenha(g);
}

i一般に、変数(ここのような)は常に可能な限り小さいスコープ(メソッドまたはループ、ここのように)で宣言します。

于 2011-06-13T22:46:10.673 に答える