如何在SpringLayout中对组件进行右对齐?

时间:2012-12-04 00:51:29

标签: java swing springlayout

我正在尝试创建一个左侧有几个文本项的布局,右侧有一个按钮。我完全按照我想要的方式获得文本项目,但是我无法在右侧对齐按钮。

enter image description here

我正在按如下方式创建按钮:

    SpringLayout layout = new SpringLayout();
    JPanel p2 = new JPanel(layout);
    // set panel size very large so it fills its own parent
    p2.setMaximumSize(new Dimension(Short.MAX_VALUE, Short.MAX_VALUE));
    p2.setBackground(new Color(0xffd0d0));
    p2.setBorder(BorderFactory.createLineBorder(new Color(0)));
    // Add some text items; omitted for clarity
    ...
    // Add a button in the lower-right corner
    JButton btn = new JButton(refreshAction);
    p2.add(btn);
    layout.putConstraint(SpringLayout.EAST, btn,
                Spring.constant(0),
                SpringLayout.EAST, p2);
    layout.putConstraint(SpringLayout.SOUTH, btn,
                Spring.constant(0),
                SpringLayout.SOUTH, p2);

我认为这会使按钮的东边和南边与容器的东边和南边对齐,但它没有发生。看起来按钮边缘与容器的首选大小对齐,而不是与实际大小对齐。

还有一个数据点:当我设置标签的值时,Button会向右跳转,将自身与刚刚添加的文本的末尾对齐。很明显,即使实际尺寸没有改变,容器的首选尺寸也会增加,并且按钮的位置会随之改变。

2 个答案:

答案 0 :(得分:0)

嗯,两天后没有回答=找另一种方式。我使用了GridBagLayout,我本来应该做的。我会打开这个问题,以防万一有人在某天回答。

答案 1 :(得分:0)

所以这是一个非常古老的问题,但我有一个类似的问题,正确使用SpringLayout。

对我来说有用的是对齐左边的东西,并调整组件的大小以适应面板右边缘。 (这可能不是最好的解决方案)

例如,如果我有四个盒子,我想对齐:

| box1 | box2 |

| box3 | box4 |

box1将是:

layout.putConstraint(SpringLayout.NORTH, box1, 2, SpringLayout.NORTH, buttonPanel);
layout.putConstraint(SpringLayout.WEST, box1, 2, SpringLayout.WEST, buttonPanel);

box2将是:

layout.putConstraint(SpringLayout.NORTH, box2, 2, SpringLayout.NORTH, buttonPanel);
layout.putConstraint(SpringLayout.WEST, box1, 2, SpringLayout.EAST, box1);

box3将是:

layout.putConstraint(SpringLayout.NORTH, box3, 2, SpringLayout.SOUTH, box1);
layout.putConstraint(SpringLayout.WEST, box3, 2, SpringLayout.WEST, buttonPanel);

box4将是:

layout.putConstraint(SpringLayout.NORTH, box4, 2, SpringLayout.SOUTH, box2);
layout.putConstraint(SpringLayout.WEST, box1, 2, SpringLayout.EAST, box3);