使用 JSeperator - Java 时出现异常间隙
我一直在开发 Swing GUI,在添加 JSeperator 后出现了一些不寻常和不需要的间隙,知道如何删除它们吗?或者任何其他选择来很好地实现这一目标!
视觉描述
JLabel
之前的间隙很明显 "速度”和 JSlider
之后。
相关代码
control.setLayout(new BoxLayout(control, BoxLayout.X_AXIS));
...another code omitted...
control.add(orientation); //JLabel
control.add(norm); //JRadioButton
control.add(back); //JRadioButton
control.add(new JSeparator(SwingConstants.VERTICAL));
control.add(speedLabel); //JLabel
control.add(speed); //JSlider
control.add(new JSeparator(SwingConstants.VERTICAL));
control.add(turnOutLabel); //JLabel
control.add(right); //JRadioButton
control.add(straight); //JRadioButton
control.add(left); //JRadioButton
我想要的是让所有内容都集中并由JSeperator分隔,
视觉描述
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
只需将
new JSeparator(...)
替换为以下几行(如果需要,您可以将它们放入方法中):正如 @kleopatra 所解释的,JSeparator 具有无限的最大大小(在两个方向上),因此这里的技巧是将最大宽度限制为首选宽度,但仍保持最大高度不变(因为首选高度为
0
)。Just replace
new JSeparator(...)
with the following lines (you can put them in a method if you want):As @kleopatra explained, JSeparator has unbounded maximum size (in both directions), so the trick here is to limit the max width to the preferred width, but still keep the max height unchanged (because the preferred height is
0
).BoxLayout 添加这些间隙的原因是
FlowLayout 根本不显示分隔符的原因,
简单的方法是 Howare 的第一个建议:使用 flowLayout 将完整的控件添加到面板中。更强大的解决方案是切换到更强大的 LayoutManager :-)
(再次删除编辑,BorderLayout.south/north 没有;-)
The reason BoxLayout is adding those gaps is that
The reason FlowLayout doesn't show the separators at all,
The easy way out is Howare's first suggestion: add the complete control to a panel with flowLayout. The more robust solution is to switch over to a more powerful LayoutManager :-)
(removed edit again, BorderLayout.south/north doesn't ;-)
将 BoxLayout 更改为新的 FlowLayout(FlowLayout.LEFT)。这应该有效。不幸的是,我没有真正的解释为什么 BoxLayout 不适合你。
change BoxLayout to new FlowLayout(FlowLayout.LEFT). This should work. Unfortunately I do not have a real explanation why BoxLayout does not work for you.
您可以将您的
控件
放入另一个带有FlowLayout
的面板中。更新:不幸的是,直接通过将
control
设置为flowlayout不起作用,因为分隔符的首选高度为零并且分隔符将消失。
You may put your
control
into another panel with aFlowLayout
.Update: Unfortunately setting the
control
to flowlayout directly viadoes not work, since the separator's preferred height is zero and the separators will disappear.