0

いくつJPanelかのコンポーネント (チェックボックス、コンボなど) を追加した があります。フレームが最大化されると、コンポーネントの境界も右に移動またはシフトすることに気付きました。その後、復元時にコンポーネントが元の位置に戻されます。

21 インチ以上のモニターでは、コンポーネントが右端に移動していることがわかるため、コンポーネントのシフトが実際に違いを生みます。

を実装するカスタマイズされたレイアウトマネージャーを使用していますjava.awt.LayoutManager2。クラスの内容は非常に大きいため、コンポーネントの境界を決定する領域を指します。

protected int hMargin = 0;
..
Insets insets = target.getInsets();
Dimension size = target.getSize();

int  x = (size.width - insets.left - insets.right - 15 * hMargin);

そして、レイアウトを呼び出すフレームから、以下に示すようにコンポーネントを追加します。

JPanel  pl = new JPanel(new OurLayout(this))
//add the component to panel
pl.add(checkBox);
..

と決めた時点で、呼び出しパネルを追加したフレームを最大化xしたときにコンポーネントがずれないように線を追加したいと思います。

これを達成する方法について誰かがアイデアを提案できますか? サンプルコードは高く評価されます。

4

2 に答える 2

2

カスタム レイアウト マネージャーがある場合、レイアウト マネージャーはパネルの優先サイズを尊重する必要があります。問題はレイアウト管理コードにあります。

または、簡単な解決策として、カスタム パネルを FlowLayout を使用する別のパネルに追加します。次に、カスタム パネルの優先サイズが尊重されます。

于 2011-10-06T14:53:42.317 に答える
0

彼らの推奨事項のおかげThomascamickr、私は以下の構文を使用して解決策を達成しました。

      size=c.getMinimumSize();
      int dist =(size.width - insets.left - insets.right);
      int move = ((dist > 32) ? 35 : 38);
      x = (dist + move * hMargin);

繰り返しますが、すべての推奨事項に感謝します。

于 2011-10-06T16:07:59.360 に答える