4

MigLayoutを使用してレイアウト要件を簡単に満たす方法を示すために少し遊んでいる間、私は次の結果に驚いていました。

MigLayout layout = new MigLayout("wrap 3, debug");
JComponent content = new JPanel(layout);

content.add(new JLabel("First:"));
content.add(new JScrollPane(new JTextArea(10, 20)), "skip, spany");
content.add(new JLabel("Second"));
content.add(new JTextField(10));
content.add(new JLabel("third"));
content.add(new JTextField(10));
//content.add(new JLabel());

レイアウトのアイデアは非常に単純です。

  • 3列
  • すべての行にまたがる最後の列
  • 最初の2列はラベル/コンポーネントのペアの束

予期しないことは、最初の2列の最後の行が利用可能なすべての垂直方向のスペースを占めるため、最後のペアが中央に配置されることです(上揃えはオプションではありません。互いにベースラインを揃える必要があるためです)。

ここに画像の説明を入力してください

上記の最後の行のコメントを外す(事実上目に見えないダミーを追加する)と、予想されるレイアウトが表示されますが、本番コードに入るべきではないハックが表示されます

ここに画像の説明を入力してください

問題は、ハッキングせずに期待されるレイアウトを実現する方法です。

4

1 に答える 1

4

バグかもしれません

回避策としては、ハッキーではない方法(フォームの作成時に行数がわかっている場合に適用可能)は、行の制約を明示的に定義することです。

MigLayout layout = new MigLayout("wrap 3, debug", "", "[][][][]");

つまり、スパニングコンポーネントの側面にあるコンポーネントに実際に必要な行よりも1行多く定義します。

于 2012-07-28T16:59:13.473 に答える