什么是在对象之间放置空格的最佳方式?Swing JSeparator对象可以作为不可见分隔符吗?

12

我正在尝试使用Swing小部件在面板中放置两个按钮。在NetBeans IDE内,我的JSeparatorborder属性在属性窗格中设置为(无边框)

然而,一条线条出现了。这不是我从分隔符对象中期望的结果。我从Delphi和C# WinForms的背景中来,所以我希望在Swing中能够找到一些奇怪的地方。但是,如何在面板中的两个按钮之间制作一个特定大小的透明间隙?我必须玩弄布局并避免使用JSeparator吗?

更新:使用布局而没有任何分隔符对象应该很容易实现。那么你该怎么做呢?我正在研究NetBeans布局自定义器和属性检查器,但找不到任何方法来实现它。(答案:使用Insets布局,而不是分隔符。)


"(no border)" 是 null 还是表示空边框的对象?null 是 UI 默认的边框。 - Pete Kirkham
顺便说一下,如果你真的想这样做,你需要覆盖JSeparator的外观代码以不绘制任何内容。这些线不是边框。 - justkt
1
JSeperator是为了创建可见的分隔符而发明的。你不需要一个分隔符,你需要一种分离的方法,可以通过以下众多方法之一实现。 - Alex Feinman
4个回答

28
你应该查看Box类中的静态实用方法。 它们可以用于制造作为不可见分隔符的固定支撑; 例如,
JPanel pnl = new JPanel(new FlowLayout());
pnl.add(new JButton("Hello"));
pnl.add(Box.createHorizontalStrut(10)); // Fixed width invisible separator.
pnl.add(new JButton("Goodbye");

这比自己创建/配置具有适当最小、最大和首选尺寸的JPanel产生更紧凑的代码。


我认为这段代码和JPanel在长期使用中可能会带来更多的困扰,因为标准做法是适当地使用布局。 - Warren P
2
@Warren P:根据您使用的布局管理器,这段代码可能是布局的一个适当用法。不同的布局管理器在实现相同的结果方面有非常不同的方式。 - Mark Peters
“APpropriate use of layouts” 在我的情况下意味着“在我还在学习NetBeans、Swing并且温故Java语言知识的时候,使用NetBeans布局管理器而不是生成自己的代码”。;-) - Warren P
没有什么可以说使用水平支撑不是布局的适当用法;我通常使用这种方法在JToolBar上间隔按钮。例如,在文字处理应用程序中,添加一个小支撑来分隔按钮类别可能很常见。 - Adamski
如果你问我,这是最好的答案。 - Epaga

4
JSeparator是用来在组件之间作为可见分隔符的。
根据JSeparator的javadoc文档
JSeparator提供了一个通用组件,用于实现分隔线 - 最常用于菜单项之间的分隔符,将它们分成逻辑分组。
如果您想在两个组件之间放置一个不可见的组件,只需使用JPanel代替。然后使用setPreferedSize()setMin/MaxSize()设置面板的大小即可。

在除了Java以外的大多数环境中,消除那行代码的选项都会被考虑到。奇怪的是这些人没有考虑到。 - Warren P
1
相反,空的“Box”项和“Insets”是为此目的而创建的。它被考虑过,只是不使用“JSeparator”。 - justkt
啊,是的。Insets非常适合我的需求,而box和createHorizontalStrut对于任何其他应用程序来说都足够了。现在我恍然大悟了。谢谢。 - Warren P

2
你不需要使用JSeparator。大多数布局都允许你在组件间设置间隔(空白)。而Box类尤其有用。

我该怎么在一个框布局中添加两个按钮,且两个按钮之间至少有10个像素的距离?我好像做不到。 - Warren P
1
FlowLayout 中,在按钮之间使用 Box.createHorizontalStrut(10) - justkt
很好。另一个人在代码中提到了这一点,但我试图从IDE(netbeans)中完成这个操作。结果发现你可以通过调整“插入”在布局管理器中以可视化的方式完成这个操作。 - Warren P
3
我将永远被人称为“另一个人” :-( - Adamski

1
使用高度为1的addSeparator对我来说是不可见的,例如:
MyJToolBar.addSeparator(new Dimension(20, 1));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接