JFrameに最後に追加したJPanelのサイズが変更されるのはなぜですか?

だから私は、スイングフレームワークを使用してGUIアプリケーションに取り組んでいます。要するに、私は3つのJPanelを持っていて、それらは私のアプリケーションの異なるビューとして機能します。今問題は、JPanelをJFrameに追加する順番にかかわらず、私がそのビューに切り替えるときに追加するJPanelの最終のみがサイズ変更されることです。

コードのいくつかの関連するビット:

ウィンドウを作成するときは、最初に個々のJPanelを作成し、JFrameに追加します。

 JPanel newPanel = new SomeClassExtendingJPanel();
 this.jframe.add(newPanel);

次に、アプリケーションのビューを切り替えるたびに、現在アクティブなパネルを非表示にします。

 jframe.validate();
 jframe.repaint();
 oldPanel.setVisible(false);

表示パネルをアクティブにします:

 jframe.validate();
 jframe.repaint();
 newPanel.setVisible(true);

誰が何が間違っているかも知っていますか?

2

2 答え

JFrameのContentPaneは、デフォルトで BorderLayout を実装しています。 1つの JComponents を1つの Area に入れ、

you have to change used LayoutManager or put another JPanels to the other Areas

2
追加された

各スワップでJFrameのサイズを変更するには、 pack()を呼び出すことができますが、これはGUIのサイズを常に変更しているkludgyです。より良い解決策は、Swingがビューをスワップするためのメカニズム、つまりCardLayoutを使用することです。これにより、すべての「カード」コンポーネントを適切に表示するのに必要な最大の寸法にコンテナのサイズが調整されます。

CardLayoutチュートリアル CardLayout API を参照してください。

2
追加された
レイアウトマネージャはどこにあるべきですか?たとえば、他のすべてのJPanelのコンテナとして機能する新しいJPanelを作成すると、JFrameのサイズ変更時にJPanelが実際にサイズ変更されますか?
追加された 著者 Bartvbl,
それは働いた..ありがとう。そして火傷を振り回すかもしれない。
追加された 著者 Bartvbl,
レイアウトを組み合わせる方法については、入れ子レイアウトの例をご覧ください。
追加された 著者 Andrew Thompson,