0

グリッドバッグ レイアウトを編集する必要があり、問題があり、奇妙な結果が得られます。
予想:
| あ | | | ビ |
| | -- | | | シー |
| | D | | | -- |

結果:
| あ | | | ビ |
| | D | | | シー |

A と C の高さは 2 これが gridbag の仕組みですか? とにかくそれを強制することはありますか?

私のプログラムには 2 つの列と n 個の行があります。2 の幅をサポートしますが、最初の列にある場合にのみ有効になります。2 行目の場合は、幅が 1 であるかのように機能します。

gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(7, 7, 7, 7);
gbc.weightx = 0.5;
gbc.anchor = GridBagConstraints.NORTH;

コンポーネントはユーザーによって追加され、ユーザーは と を決定しwidthますheightgridxとのgridy値は、追加および配置される他のコンポーネントによって決まります。

gridbag レイアウトは、たとえば
*_ _
|A|B|に対して正常に機能します。
|_|C|
C の高さが 2 の場合、気に入らないようです。

4

2 に答える 2

1

質問が明確になったので、次のようにします。

protected static final Insets entryInsets = new Insets(0, 10, 4, 10);
protected static final Insets spaceInsets = new Insets(10, 10, 4, 10);

protected void createPartControl() {
    panel = new JPanel();
    panel.setLayout(new GridBagLayout());

    int gridy = 0;
    gridy = createTextFields(gridy);
}

protected int createTextFields(int gridy) {
    JLabel a = new JLabel("A");
    a.setHorizontalAlignment(SwingConstants.LEFT);
    addComponent(panel, a, 0, gridy, 1, 2, spaceInsets,
            GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL);

    JLabel b = new JLabel("B");
    b.setHorizontalAlignment(SwingConstants.LEFT);
    addComponent(panel, b, 1, gridy++, 1, 1, spaceInsets,
            GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL);

    JLabel c = new JLabel("C");
    c.setHorizontalAlignment(SwingConstants.LEFT);
    addComponent(panel, c, 1, gridy++, 1, 1, entryInsets,
            GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL);

    JLabel d = new JLabel("D");
    d.setHorizontalAlignment(SwingConstants.LEFT);
    addComponent(panel, d, 0, gridy++, 2, 1, entryInsets,
            GridBagConstraints.LINE_START, GridBagConstraints.HORIZONTAL);

    return gridy;
}

protected void addComponent(Container container, Component component,
        int gridx, int gridy, int gridwidth, int gridheight, 
        Insets insets, int anchor, int fill) {
    GridBagConstraints gbc = new GridBagConstraints(gridx, gridy,
            gridwidth, gridheight, 1.0D, 1.0D, anchor, fill, insets, 0, 0);
    container.add(component, gbc);
}
于 2012-09-20T16:25:44.343 に答える
1

使用しているオブジェクトのプロパティを設定GridbagConstraints.BOTHしていることを確認してください。そうしないと、コンポーネントを複数の行に配置できません。fillGridbagConstraints

GridbagConstraints c = new GridbagConstraints();
c.fill = GridbagConstraints.BOTH;
于 2012-09-20T16:02:29.957 に答える