web-dev-qa-db-ja.com

Java Swing set "actual" Frame size(inside)

JPanelを1つだけ含むJFrameがあります。パネルのサイズを設定してフレームを梱包してみましたが、効果がありません。

JFrameのサイズを設定すると、タイトルバーと境界線が含まれるようにサイズが変更されます。タイトルバーと境界線が含まれないように「実際のサイズ」を設定するにはどうすればよいですか?

例:

Example

よろしくお願いします

19
CookieMonster

JFrameでcontentPaneのpreferredSizeとcallpackを設定できますが、通常は、レイアウトマネージャーによって決定された優先サイズに基づいてコンポーネントのサイズを設定するのが最適です。

JPanelの優先サイズを設定すると、JFrameのpack()メソッドはそれを尊重します。

10

これは、JPanelのサイズを設定してフレームを梱包する例です。

JFrame frame = new JFrame();
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200, 200));
frame.add(panel);
frame.pack();
frame.setVisible(true);

このようなことを試しましたか?

9
Tulio

フレームの境界線を取得する場合は、最初にフレームで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));
}
0
Lachezar