3

最小サイズを正しく定義するには、次のことを行う必要があります。

// setting minimal width AND height
Dimension min = new Dimension(100, 100);
comp.setMinimumSize(min);
comp.setPreferredSize(min);
comp.setSize(min);

1 行を省略しても機能しません。これは奇妙ですが、それは問題ではありません。

2 つの寸法 (幅または高さ) のうちの1 つだけを制限し、指定されていない寸法についてコンポーネントおよび/またはレイアウト マネージャーに自動的に決定させるにはどうすればよいですか?

制限したくない寸法に非常に小さい値を使用すると、多くのコンポーネントが正しく表示されません (つまり、小さすぎます)。

4

2 に答える 2

5

デフォルトでは(つまりsetMinimumSize、コンポーネントで呼び出されていない場合) 、コンポーネントのレイアウトマネージャーに委任されるため、次のようにメソッドgetMinimumSizeの再定義を試みることができます。getMinimumSize

public Dimension getMinimumSize()
{
    return new Dimension(minWidth, super.getMinimumSize().height);
}

これを行う場合はsetMinimumSize、コンポーネントを呼び出さないでください。

于 2010-10-05T20:09:40.263 に答える
0

私は自分でアプローチを提案します:

すべてを1つの軸(などBoxLayout)に揃えるレイアウトマネージャーの場合、「未定義の寸法」をに設定して指定できますInteger.MAX。奇妙ですが、機能します。位置合わせ軸と反対の軸は無視されているようです(質問で述べたように、小さすぎる場合を除きます)。

private final static int UNSPECIFIED_DIMENSION = Integer.MAX_VALUE;

public static void setMinimalDimension(Component comp, int width, int height) {
  Dimension dim = new Dimension(width, height);
  comp.setMinimumSize(dim);
  comp.setPreferredSize(dim);
  comp.setSize(dim);
}

public static void setMinimalWidth(Component comp, int width) {
  setMinimalDimension(comp, width, UNSPECIFIED_DIMENSION);
}

public static void setMinimalHeight(Component comp, int height) {
  setMinimalDimension(comp, UNSPECIFIED_DIMENSION, height);
}

前述のように、軸整列レイアウトマネージャーで動作します。

はい、JavaSwingの別の謎があります...

于 2010-10-05T20:22:57.717 に答える