2017-02-02 4 views
-2

私はJavaでプログラムを作成していますが、レイアウトが異なるJPanelがあります。これらのJPanelでは、JButtonやJLabelsのような他のコンポーネントを持つ別のJPanelがあり、JFrameのサイズに応じてサイズを変更したいと考えています(JPanelのJPanelの高さはJFrameのコンテンツペインの半分に等しい)。Java - 独自のJPanelでJPanelを切り替え、内部のJPanelとコンポーネントをJFrameのサイズに応じてサイズ変更します。

私はこれらのJPanelsを直接作成してJFrameに直接追加または追加しようとしましたが、JFrameをパックし、再検証して再ペイントしませんでした。

また、CardLayoutを使用して試しました。私はJPanelsを作ってJFrameに追加されたコンテナに追加しました。切り替えはうまくいきましたが、JFrameのコンテンツペインのサイズを取得しようとしたときや、JPanelsでCardLayoutコンテナのサイズを取得しようとしたときに、幅と高さが0になったため、JPanelsと他のコンポーネントをCardLayoutコンテナのJPanelでサイズ変更できません。

これを達成する方法はありますか?

わかりやすく書いていただければ幸いです。実際には様々なシーンでゲームを作りたいと思っています。ボタンをクリックすると、別のコンポーネント(JPanels、JButtons、画像など)を持つ別のシーンに切り替わります。たぶん私はJFrameで1つのメインJPanelを使用し、そのレイアウトを変更し、シーンに応じて背景画像、JPanels、JButtonsなどを追加して追加することができますが、可能かどうか、別の問題が発生しないかどうかはわかりません。

ありがとうございました。

答えて

1

CardLayoutは、追加されたコンポーネントの最大優先サイズに収まるように、そのコンテナのサイズを変更することができるため、これを使用する必要があります。あなたが解決しなければならない問題は、現在のコンポーネントカードの推奨サイズがあなたの望むように機能していないことです。この発生の最も一般的な理由は、ヌルレイアウトと絶対配置の使用によるものです。これをあなたのカードコンポーネントのJPanelsで使用しているのであれば、そうしないといけません。また、適切なサイズを直接制御する必要がある場合は、不正なカードコンポーネントのJPanelsに対してgetPreferredSize()をオーバーライドする必要があります。 JPanelがpaintComponentメソッドで画像を表示する場合、私はこれをしばしばやりました。そして、私はJPanelをこれを行うのに十分な大きさにします。

問題を解決するために、SSCCEを作成して投稿することを検討してください。

+0

私は絶対配置を使用しませんが、内部コンポーネントのサイズを指定したいだけです。 JFrameのコンテンツペインのサイズの半分の高さを持つJPanelのJPanelですが、CardLayoutコンテナの内側にあるJPanelクラスのコンストラクタでフレームまたはそのコンテンツペインの実際のサイズを取得できません。 – Spook

+1

(1+) - '高さがJFrameのコンテンツペインの半分の高さを持つJPanel上のJPanel ' - CardLayoutに追加するパネルは、GridLayoutを持つパネルになる可能性があります。あなたは私たちのSSCCEを投稿していませんので、私たちはさらに助けません。 – camickr

関連する問題