レイアウトに複数のJPanelがあり、マウスを使用してJFrameのサイズを手動で変更すると、JPanelが引き伸ばされ、乱雑に見えます。これを無効にする方法はありますか?
3 に答える
JPanelはユーザーがサイズ変更できません。
JFrameを参照している場合は、次を使用できます。
yourFrame.setResizable(false);
使用しているLayoutManagerがすべてです。BorderLayoutのような一部のLayoutManagerは、常に中央の位置に追加された子に余分なスペースを与えます。ただし、北、南、東、西はそれらに優先サイズのみを割り当てました。私のお気に入りのLayoutManagerは、非常に使いやすく、非常に強力なTableLayoutです。各子に追加のスペースを割り当てる方法を選択できます。ですから、それは本当にあなたが何を使っているかに依存します。
JFrameでMaximumSizeを設定することもできますが、JFrameのサイズを変更することはできません。
@Shehzadと@chubbsondubsからの回答をさらに詳しく説明したいと思います。
まず、Shehzadが述べたように、「サイズ変更可能」はJPanel
オブジェクトの既知の属性ではありません。ただし、これは、パネル(およびその他のコンポーネント)を含むウィンドウまたはフレームの属性です。問題は、コンテナのサイズが変更されたときにパネルのサイズが変更されないようにする方法です。chubbsondubsが述べたように、それはすべてあなたが使用しているレイアウトマネージャーに関するものです。次のコードスニペットについて考えてみます。
add(contextPanel, BorderLayout.CENTER);
add(btnPanel, BorderLayout.SOUTH);
add(sidebar, BorderLayout.WEST);
これらの行は、フレームのコンストラクターから抽出されました。オブジェクトは、テキストフィールド、ラベル、およびその他のコンポーネントを配置するためにsidebar
使用するパネルです。パネルの、、、および属性を同じサイズに設定しましたが、ダイアログのサイズを変更すると、コンテナーはオブジェクトに設定された最小、最大、および優先サイズの属性を「尊重」しませんGridBagLayout
(Research Layout Managers toこれがなぜであるかを知っています)。私のダイアログ(フレーム)はこれらのサイズの制約を尊重しないため、を親フレームから分離する必要があります。これを行うには、を別のパネルに追加してから、この新しいパネルをダイアログに追加します。つまり、「サイドバー」は、代わりにその直接の親を追加することにより、ダイアログに間接的に追加されます。preferredSize
minimumSize
maximumSize
sidebar
sidebar
sidebar
JPanel dummyPane = new JPanel();
dummyPane.add(sidePanel);
add(contextPanel, BorderLayout.CENTER);
add(btnPanel, BorderLayout.SOUTH);
add(dummyPane, BorderLayout.WEST);
ここで、この場合、親フレームによってサイズ変更されるときdummyPane
に、オブジェクトで定義されたサイズ制約を「尊重」します。sidebar
アップデート:
最後にもう1つ...絶対測位を使用している場合は、、、、またはではなく、size
属性を設定する必要があります。絶対測位を使用する場合、これらは無視されます。絶対配置とは、レイアウトマネージャーがに設定され、コンポーネントのx、y座標が明示的に設定されている場合です。コンポーネントのは、またはメソッドを使用して設定できます。preferredSize
minimumSize
maximumSize
null
size
setSize(int width, int height)
setBounds(int x, int y, int width, int height)