1

JRadioButton と JLabel の 2 つのコンポーネントを持つ GridBagLayout があります。ラベル内のテキストは長さが異なります。この GridbagLayout は JPanel に追加されます。そのため、多くのコンポーネントがある場合、最終的にそれらがうまく整列しません。これが私が意味することです:

-----radio btn-label-----
---radio btn-label     --
-------radio btn-lbl-----

しかし、私は次のものが必要です:

-radio btn-label        -
-radio btn-label        -
-radio btn-lbl          -

これは、今のところ私のグリッドがどのように見えるかです:

public class MyPanel extends JPanel {
private JLabel info;
private JRadioButton select;

public MyPanel() {
    this.achiev = achiev;
    achievementInfo = new JLabel();
    selectAchiev = new JRadioButton();

    setLayout(new GridBagLayout());
    GridBagConstraints constraints = new GridBagConstraints();

    constraints.gridx = 0;
    constraints.gridy = 0;
    constraints.anchor = GridBagConstraints.LINE_START;
    add(selectAchiev, constraints);

    StringBuilder builder = new StringBuilder();
    builder.append("<html><b>").append("some text").append("</b><p>");
    builder.append("<i>").append("some more text").append("</i>");
    info.setText(builder.toString());
    constraints.gridx = 1;
    constraints.gridy = 0;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    add(info, constraints);
}

//--------------

JPanel panel = new JPanel(new BoxLayout(), BoxLayout.YAXIS);
for(int i = 0; i < 10; ++i) {
    panel.add(new MyPanel());
}
4

2 に答える 2

2

このGrigBadLayout ドキュメントで述べられているように、 weightx、weighty の制約を見逃していると思います。

weightx または weighty にゼロ以外の値を少なくとも 1 つ指定しない限り、すべてのコンポーネントがコンテナーの中央に集まります。これは、重みが 0.0 (デフォルト) の場合、GridBagLayout がセルのグリッドとコンテナーのエッジの間に余分なスペースを配置するためです。

コンポーネントをそのように見せたい場合は、BoxLayoutの使用を参照してください

private void init() {
    Box outerBox = new Box(BoxLayout.Y_AXIS);
    outerBox.add(createLineWithRadioButtonAndLabel());//line 1
    outerBox.add(createLineWithRadioButtonAndLabel());//line 2
    outerBox.add(createLineWithRadioButtonAndLabel());//line 3

    add(outerBox);
}

private Box createLineWithRadioButtonAndLabel() {
    Box line = new Box(BoxLayout.X_AXIS);
    JRadioButton radio = new JRadioButton("radio button");
    JLabel label = new JLabel("some text");

    line.add(radio);
    line.add(Box.createRigidArea(new Dimension(20, 1)));// add some horizontal space. Here is 20
    line.add(label);
    line.add(Box.createHorizontalGlue());

    return line;
}
于 2013-08-17T15:04:36.663 に答える