2011-12-22 13 views
8

ユーザーが自分のGUI上で何かをクリックしたときに何かをクリックすると、JTableが消えて、別のJComponentが置き換えられるようにしようとしています。 contentPanelは私がJFrameのコンテンツペインとして設定JPanelである私は、次のコードを使用しています分、時 Javaのコンポーネントを交換する正しい方法

:完璧に動作

contentPanel.remove(table); 
contentPanel.add(component, BorderLayout.CENTER); 
contentPanel.updateUI(); 

が、私はちょうどこれがあることを確認したいです正しい方法。私はそれを達成するための他の方法は考えられませんが、それは必ずしも何かを意味するものではありません、それを行う良い方法があれば、パフォーマンスや何かに関して、私はそれについて知りたいです...

+0

それは私によく見える – GETah

+0

コメントありがとう@GETah – Andy

+1

しかし、コメントが間違っています。 updateUI()を使用すべきではありません(私はコメントを投票する方法がわかりませんが、私は持っています)。 updateUI()を使用するアイデアを人々がどこに持ち続けるか分かりません。私が所属するすべてのフォーラムでは、 – camickr

答えて

14

いいえ、それはそれを行う方法ではありません。 updateUI()を呼び出すべきではありません。 APIを読み、そのメソッドは、LAFを変更するときにのみ使用されます。 (それは何irrevelevantだ)、1 JTableは消え、別のJComponentがそれに取って代わるだろう

panel.add(...); 
panel.revalidate(); 
panel.repaint(); // sometimes needed 

:あなたがすべきコンポーネントを追加/削除した後

おそらく関連性があります。通常、JTableはJScrollPaneに表示されます。だから、もっと良い解決法があります:

scrollPane.setViewportView(anotherComponent); 

スクロールペインがあなたのために妥当性検査を行います。

+0

ありがとう、私は自分のコードを変更し、それでも動作します。その小さな問題とは別に、私のコードで変更しなければならないことがありますか? – Andy

+0

編集していただきありがとうございます、それはまた知っていることもかなり有用です! – Andy

+0

FYI、私が言ったコンポーネントは無関係でしたが、実際にユーザーがクリックしたコンポーネントであり、表示されていない(または削除された)コンポーネントでした! – Andy

7

もっと良い方法は、CardLayoutを使用して両方のテーブルを追加し、正しいカード/テーブルを表示することです。

+0

それはちょうど好みである、それではないか。または、それは私のコードのパフォーマンスに大幅に影響を与えますか? – Andy

+0

CardLayoutは、各パネルの複数のコンポーネントでエンティティパネルを置き換えるときに便利です。つまり、replaceAll()メソッドを使用してコードを参照すると、CardLayoutの候補になります。 CardLayoutを使用するときは、両方のカードが同時にメモリ内にあるため、余分なメモリが使用されます。 – camickr

+0

@camickr:両方のコンポーネントを初期化しても、CardLayoutはより多くのメモリを使用しますか? JPanelにコンポーネントを追加すると、より多くのメモリが使用されますか? – Andy

関連する問題