4

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

在此处输入图像描述

这是我的代码:

    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);)。任何解决方案都将受到高度赞赏,我坚持这一点太久了。谢谢

--EDIT--
这工作得很好:

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

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

--EDIT 2--
修复了使用单选按钮的背景setOpaque(false);

4

2 回答 2

4

你是什​​么意思“打破”了“是”和“否”的位置,因为 GridLayout 应该可以正常工作。我会通过new GridLayout(0, 1). 确保它的 opaque 属性被设置为 false radioPanel.setOpaque(false);。这样,它将显示它所在容器的背景颜色。您可能还需要使 JRadioButtons 不透明,我不确定。

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

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

于 2011-07-26T00:49:03.747 回答
4

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

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

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

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

于 2011-07-26T01:19:35.513 回答