Java gui窗口中组件的对齐
我有一个看起来像window1的窗口,我希望它看起来像window2:Java gui窗口中组件的对齐,java,swing,user-interface,jpanel,layout-manager,Java,Swing,User Interface,Jpanel,Layout Manager,我有一个看起来像window1的窗口,我希望它看起来像window2: btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS)); btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10)); btnPanel.add(Box.createHorizontalGlue()); btnPanel.setLayout(new BoxLayout(btn
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
这是我的代码:
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);
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
这样按钮问题就解决了。但是,仍然无法修复单选按钮
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
--编辑2--使用
setOpaque(false)修复了单选按钮的背景代码>你所说的“中断”是什么意思?作为网格布局,“是”和“否”的位置应该可以正常工作。我会通过newgridlayout(0,1)
给它1列和2行(或者为可变数量的行设置0)。通过执行radioPanel.setOpaque(false),确保其不透明属性设置为false代码>。这样,它将显示它所在容器的背景色。我不确定,您可能还需要将JRadioButtons设置为非不透明
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
您的btnPanel可以使用BoxLayout并使用Box.createGlue()将按钮推到右侧
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
最重要的是——如果您还没有这样做,请阅读您可以找到的有关Swing布局管理器使用的教程。您可以为此做几件事。你需要更换你的布局经理。对于BorderLayout来说,这不是一项伟大的任务。你可以做嵌套的BoxLayouts。具有垂直固定高度支柱、标签、垂直固定高度支柱、yes radio、垂直固定支柱、no radio、垂直胶水和最终按钮面板的垂直框。然后使用按钮面板中的编辑将它们水平对齐。这是一种选择,但是面板的嵌套很烦人
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
另一个选择是获取TableLayout并学习如何使用它。TableLayout是最好的布局管理器之一。它易于使用,经过了严格的测试,让Swing再次充满乐趣。你再也不会使用GridBagLayout了
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());
最后一个选项是使用新的GroupLayout。我对它不太熟悉,但看起来很简单。而且,它不像Box那样需要太多的代码或嵌套不必要的面板。对不起,我的意思是它们在垂直方向上彼此太长了。和radioPanel.setBackground(彩色暗光)代码>不再有任何效果。1)尽管GridLayout和Set不透明,我仍然会遇到同样的问题(太长和背景不同)。2) 我将立即检查此方法。3) 这些页面在我的Internet浏览器中是全天候打开的。@障碍:“太长”可以通过将radioPanel嵌套到另一个充当容器的JPanel中,或者使用FlowLayout,然后将容器JPanel添加到GUI中来修复。你必须发挥你的布局和调整的东西,他们的工作,如你所愿。好的,谢谢。这比我想象的要困难;)有没有一种方法可以像截图上那样为单选按钮设置相同的背景?@Barler:没有,这真的没有那么难,因为你添加的只是另一个包含JPanel的按钮。同样,让任何组件使用与其容器调用相同的背景myComponent.setOpaque(false)代码>在该组件上,正如我在上面的回答中所解释的。快速问题,我可以“合并”TableLayout中的单元格吗?您可以有一个跨多行和/或列的组件。谢谢,将在下一个窗口中使用该组件。
btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());