gui窗口中组件的对齐

时间:2011-07-26 00:46:01

标签: java swing user-interface jpanel layout-manager

我有一个看起来像window1的窗口,我希望它看起来像window2:

enter image description here

这是我的代码:

    String q = "Have you used GUI before?";     
    JLabel textLabel2 = new JLabel(
        "<html><div style=\"text-align: center;\">" + q + "</html>", SwingConstants.CENTER);
    add(textLabel2, BorderLayout.NORTH);

    JPanel radioPanel = new JPanel();                                           
    add(radioPanel, BorderLayout.CENTER);

    JPanel btnPanel = new JPanel();
    add(btnPanel, BorderLayout.SOUTH);

对于单选按钮,我尝试使用GridLayout,但它打破了“是”和“否”的位置。而对于“后退”和“下一步”按钮,水平对齐显然不起作用(btnPanel.setAlignmentX(RIGHT_ALIGNMENT);)。任何解决方案都将受到高度赞赏,我坚持这么长时间。感谢

- 编辑 -
  这工作得非常好:

btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());

所以按钮问题就解决了。
  但是,仍然无法修复单选按钮。

- 编辑2 -
  修复了使用setOpaque(false);

的单选按钮的背景

2 个答案:

答案 0 :(得分:4)

你是什么意思“打破”“是”和“否”的位置,因为GridLayout应该工作得很好。我通过new GridLayout(0, 1)给它1列和2(或0表示可变数量)行。通过radioPanel.setOpaque(false);确保将其opaque属性设置为false。这样它就会显示它所在容器的背景颜色。你可能还需要使JRadioButtons不透明,我不确定。

你的btnPanel可以使用BoxLayout并使用Box.createGlue()将按钮推到右侧。

最重要的是 - 如果您还没有这样做,请阅读有关使用Swing布局管理器的教程,您可以找到here

答案 1 :(得分:4)

你可以做些几件事。您需要更改LayoutManager。这对BorderLayout来说不是一项伟大的任务。你可以做嵌套的BoxLayouts。垂直方框,具有垂直固定高度支柱,标签,垂直固定高度支柱,是收音机,垂直固定支柱,无收音机,垂直胶水,以及最终按钮面板。然后使用按钮面板中的编辑水平对齐它们。这是一个选择,但面板的嵌套很烦人。

另一个选择是获取TableLayout并学习如何使用它。 TableLayout是最好的LayoutManagers之一。它易于使用,经过严格测试,使Swing再次变得有趣。你永远不会再使用GridBagLayout了。

http://java.sun.com/products/jfc/tsc/articles/tablelayout/

最后一个选项是使用新的GroupLayout。我对它并不十分熟悉,但它看起来很简单。并且,它不需要像Box那样需要太多代码或嵌套不必要的面板。