2012-02-19 9 views
24

私はJFrameを持っているプログラムを書いています。そこからすべてのコンポーネントを削除してから、コンポーネントを1つだけ追加してフレームを再描画したいと思います。私はこれまで持っていること(StartPanelはJPanelのを実装したJFrameを実装するオブジェクトに呼ばれる)以下のコードのようなものです:私は、コードを実行すると、それは空のウィンドウ(ないstartPanel)を示し、しかしJavaのJFrameからすべてのコンポーネントを削除するには?

removeAll();  
startPanel = new StartPanel(); 
startPanel.setVisible(true); 
add(startPanel); 
revalidate(); 
repaint(); 

ウィンドウを最小化/サイズ変更すると、ウィンドウが黒くなります。 removeAll()を除外し、すでにJFrame上に要素がない場合は、startPanelが表示されます。実際にすべてを削除する方法についてのアイデアは、新しいパネルをまだ表示するには?

+1

つの単語を更新するthoesコンポーネントを追加すること 後に検証 後に何か他のものを追加することであると仮定すると:[CardLayout](のhttp:// docs.oracle.com/javase/tutorial/uiswing/layout/card.html) –

+0

@HovercraftFullOfEelsはうまくいくかもしれませんが、手動で行う他の方法がありますか?私はそれがすべきだと思うようにremoveAll()が動作しないのはなぜですか?コードの他の部分で、一度に1つだけ表示するのではなく、さまざまなコンポーネントの組み合わせを用意する必要がある場合、私はCardLayoutを望んでいませんか? – scaevity

答えて

44

あなたは

getContentPane().removeAll(); 

removeAll()を呼び出す必要がありますが、必要に応じてcontentPaneに転送するadd()またはremove()として上書きされていません。

+0

ありがとう、これは動作するようです! – scaevity

+0

@scae:Kavkaは私たちの残りの部分よりも鋭い目を持つように見えます。良いキャッチと1+。 –

+0

簡潔で有益な答えをありがとう。 'removeAll()'は実際に記述したように 'add()'や 'remove()'のようにオーバーライドされているはずです。 Javaの奇妙な変わり点のちょうどもう一つ... – Variadicism

5
getContentPane().removeAll(); 
getContentPane().repaint(); 
+0

私は 'repaint()'を使用せず、正しく動作します。 –

3

あなたの目標は、あなたが明確にあなたが呼び出す必要があり、フレームはそれを

getContentPane().removeAll(); 
add(new component); 
validate(); 
関連する問題