JPanelを1つだけ含むJFrameがあります。パネルのサイズを設定してフレームを梱包してみましたが、効果がありません。
JFrameのサイズを設定すると、タイトルバーと境界線が含まれるようにサイズが変更されます。タイトルバーと境界線が含まれないように「実際のサイズ」を設定するにはどうすればよいですか?
例:
よろしくお願いします
JFrameでcontentPaneのpreferredSizeとcallpackを設定できますが、通常は、レイアウトマネージャーによって決定された優先サイズに基づいてコンポーネントのサイズを設定するのが最適です。
JPanelの優先サイズを設定すると、JFrameのpack()メソッドはそれを尊重します。
これは、JPanelのサイズを設定してフレームを梱包する例です。
JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200, 200));
frame.add(panel);
frame.pack();
frame.setVisible(true);
このようなことを試しましたか?
フレームの境界線を取得する場合は、最初にフレームでpackを使用し、その後、次のコードのようにFrame Insetsを取得します。
frame.pack();
Insets insets = frame.getInsets();
int frameLeftBorder = insets.left;
int frameRightBorder = insets.right;
int frameTopBorder = insets.top;
int frameBottomBorder = insets.bottom;
setResizable(boolean)メソッドの直後にpackメソッドを使用することをお勧めします。これは、何らかの理由でサイズ変更可能にするとフレームの境界が変更されるためですが、サイズ変更メソッドを使用しない場合は、-を使用してください。 packフレームコンストラクターの開始直後のメソッド。
JFrameで使用可能なスペースの実際のサイズを設定するには、createComponents(Container container)
メソッドでコンテナーの優先サイズを設定します。このようにして、setPreferredSize(new Dimension (width, length)
メソッドのrun()
を介してJFrame全体のサイズの設定をスキップします。したがって、コードは次のようになります。
@Override
public void run() {
JFrame frame = new JFrame();
// other code ...
this.createCompoents(frame.getContentPane());
}
private void createCompoents(Container container) {
// other code ...
container.setPreferredSize(new Dimension(width, length));
}