paintComponent()
関数を持つJPanel
があります。一度呼び出してから、ユーザーが別のJButton
をクリックすると、フラグを設定します。フラグが設定された後は少し異なる動作をするため、この関数をもう一度呼び出します。
だから私が疑問に思っているのは次のとおりです:paintComponent
から既存のものをクリアするにはどうすればよいですか?そして、再描画するには、もう一度paintComponent
を呼び出しますか?
現在、私は以下を試しています:
flag2 = true;
repaint(); //I expect (want) paintComponent to be called again
ペイントコンポーネントでは、次のようなことを行います。
if (flag2==true) {
g.drawRect(...);
} else {
g.drawLine(...);
}
しかし、テストを通して、私がしていることに何か問題があるようです。
助けてくれてありがとう。
パネルのプロパティを変更するときは、以下を呼び出す必要があります。
panel.repaint();
コンポーネントを再ペイントします。
次に、paintComponent()メソッドの最初のステートメントは次のようになります。
super.paintComponent(g);
これにより背景がペイントされるので、カスタムペイントを実行できます。
さらにヘルプが必要な場合は、問題を示す [〜#〜] sscce [〜#〜] を投稿してください。
まず、ブール値の代わりに列挙型を使用してみませんか?
enum Enum {
RECTANGLE,
LINE,
CIRCLE
}
Enum choice = RECTANGLE; //default to RECTANGLE
switch(choice) {
// case RECTANGLE, LINE, CIRCLE
}
あなたの問題に関して、あなたの質問で私のコメントに答えることができますか?
Revalidate();を呼び出すことをお勧めします。 repaint()の代わりに。サイズ/レイアウトを変更するとき、またはオブジェクトをjpanelに追加/削除するときに、revalidate()を呼び出す必要があり、そのすべての子を更新します。私の知る限り、あなたはまだ同じPaintオブジェクトを使用していますが、レイアウトを変更しています。