ランダムな形状とランダムなテキストを表示するプログラムを構築しようとしています。これは、JPanel を拡張するクラス内のコードです。
@Override
protected void paintComponent(Graphics g) {
// draw all shapes
super.paintComponent(g); // clears the background
this.add(new JLabel(new RandomText().getRandomSentence()));
for (RandomShape shape : shapes) {
shape.draw(g);
}
}
g.drawString() の代わりに JPanel を使用して、将来 HTML コードを表示します。repaint() メソッドを呼び出して、ウィンドウを「再生成」するボタンもあります。ただし、再生成ボタンを押して repaint() メソッドを呼び出すと、形状は (想定どおりに) 変更されますが、テキストは変更されません。さらに奇妙なのは、ウィンドウのサイズを変更すると、新しいラベルがパネルに継続的に追加されることです (本来のようにランダムなテキストで)。
super.paintCompnent(g) は、パネルに追加されたコンポーネントをクリアしませんか? もしそうなら、自分で repaint() を呼び出しても、ウィンドウのサイズ変更のように余分なラベルが追加されないのはなぜですか?