2011-12-27 6 views
0

私のクラスの1つは、他のクラスによってJFrameに追加されたJPanelを返しています。 JPanelにはJTreeといくつかのボタンが含まれています。いくつかのイベントでは、パネルが再度作成され、JFrameに戻されます。スイングコンポーネントを更新する方法

私の問題は、JPanelをJFrameのコンテナにもう一度追加してから、変更が表示されるようにフレームのサイズを変更する必要があるということです。私はサイズ変更せずにフレームを更新する方法を理解できません。古いオブジェクトを削除し、更新されたオブジェクトを追加しようとしましたが、まだ動作しません。

この問題を解決するにはどうすればよいですか?理想的には、JPanelへの参照があり、JPanelが変更されたときに、フレームも更新されます。

+0

'.revalidate()'を試しましたか? –

+0

コンテナにはそのメソッドがないようです。あなたは無効を意味するわけではありません。 – Giannis

+3

JTreeの変更_あなたのtreemodel実装のようなサウンドは、リスナーに変更について通知しないという点で無効です。 – kleopatra

答えて

3

呼び出して、最初のJFrame.invalidate()を試してみてください。私はおそらく将来的にはこれを変更しますが、データは新しいJTreeのが

を作成された変更したときに、今のところ次に、あなたのコードのようなものでなければなりません:あなたは、新しいJTreeのを追加する必要がありますされ

JTree tree = new JTree(theNewModel); 
scrollPane.setViewportView(tree); 

GUIでは、単にツリー変数への参照を変更することはできません。これはまだ、あなたはあなたのSSCCEを投稿する必要が解決しない場合は

tree.setModel(theNewModel); 

を:

あるいはさらに簡単に、あなただけ使用して既存のツリーでモデルを置き換え、新しいJTreeのを作成する必要はありませんそれはあなたの質問が依然として明確でないために問題を実証しています。

+0

scrollPane.getViewport()。getView(); – camickr

+0

私自身、スクロールペインの存在について - 自分自身で - この時間はscrollPane.getViewportView :-)再びasymetric core apiについて驚いた。 – kleopatra

+0

@kleopatra、初めての型を書いたものだが、次にAPIを再チェックした見つからないこともあります;-) – camickr

-2

は、モデル全体だけではなく、そのデータを変更しているJFrame.validate()

http://docs.oracle.com/javase/6/docs/api/java/awt/Container.html#invalidate%28%29

+1

-1、SwingはMVCデザインを使用します。コメント内ですでに述べたように、ビューがそれ自体を再描画できるようにデータが変更されたことをモデルに通知するのはモデルの責任です。フレーム上のコンポーネントの1つのモデルに変更を加えただけなので、フレーム全体を再描画または再検証()しません。解決しなければならない設計上の問題があります。 – camickr

+0

モデル全体がデータだけでなく変化しています。私はおそらくこれを将来変更する予定ですが、今はデータが変更されたときに新しいJTreeが作成されます。 – Giannis

関連する問題