3

是否有关于 Swing 中应该有多少空间控件的指南?还有一个问题是如何准确地实现这一点:一些布局管理器支持控件之间的间隙;有些没有,然后你必须使用EmptyBorder- 这也可能很痛苦,因为边界不重叠,你可能最终在两个控件之间有太多空间1 - 所以你可能需要省略一侧边界。

另一个问题是外观和感觉:如果我使用明确的间隙或边框,它可能在一个 LAF 中看起来不错,但在另一个 LAF 中看起来很糟糕。例如,Nimbus 的按钮看起来很紧凑,因为它周围有额外的空间。默认的 Windows LAF 只是将它们挤在一起,没有任何额外的空间。我意识到这本质上是一个平台问题,因为 Microsoft、Apple、Gnome 和其他公司对此主题都有不同的指导方针

因此,如果我在控件之间放置额外的空间以适应 Windows 或 Metal LAF,那么在 Nimbus 和其他可能的情况下,它的间距就会太远。

然后是如何构建 UI 的整个问题,这会对间距和边框的灵活性产生严重的副作用。从这个角度来看,将所有东西放在一个容器中GridBagLayout是很棒的,但如果您仍然需要对 UI 进行更改,那就太糟糕了。然后用适当的布局管理器从几个JPanels 构建 UI,反之亦然。

简而言之:我怎样才能确保控件的间距很好并且适合 LAF,而没有太多麻烦?也许我只是在这里忽略了一些东西——Swing 的庞大规模并非不可能。


1至少对我来说这是一个问题——也许有一个可行的解决方案。但是考虑到将两个控件彼此相邻放置的简单情况,并且您可能希望它们周围有五个像素的空白——它们之间也只有五个像素,而不是十个像素。如果不根据书写方向创建不同的边框,我看不出在一般情况下应该如何解决(因为左右不一定是控件所在的位置,但显然总是边框所在的位置)。

4

4 回答 4

2

这些指南既依赖于平台,也依赖于外观和感觉。

您可以使用javax.swing.LayoutStyle实用程序方法来找出组件与其嵌入面板之间或两个组件之间应使用的间距。

然而,这相当麻烦。

您可以考虑使用LayoutManager直接为您提供支持的。有些人建议使用 MigLayout,您还可以查看DesignGridLayout,它使组件间距对开发人员完全透明。

使用这样的 LayoutManagers,您永远不应该自己设置任何尺寸或插图,而是让它们为您执行工作。

此外,选择正确的 PLAF 很重要,因为间距可能会根据显示器的分辨率而变化(如果您选择的 PLAF 不支持 Hi-DPI 屏幕,您可能会遇到难看的行为)。

我无法列举哪些 PLAF 与分辨率无关(即知道如何处理 HiDPI 设备),但Substance肯定是其中之一,而且总体上是一个非常好的 PLAF。

于 2010-06-20T11:36:45.870 回答
1

我通过使用具有平台相关差距的MigLayout解决了这个问题。除此之外,它还提供其他平台相关功能,例如按钮大小和序列。

我强烈推荐它!

于 2010-06-19T14:21:30.983 回答
0

For all L&F and all layouts, you can't be sure : it's the purpose of l&f and layout, not yours.

Usualy, in a swing application, developper choose the layout, and user choose l&f.

Layout never change borders (it's part of composant), but they can change insets. So use combination of your layout, border, and insets.

The BoxLayout has a notion of Filler and RigidArea : see Using Invisible Components as Filler.

The SpringLayout has constraint. See How to Use SpringLayout.

The GroupLayout use gaps. You can read How to Use GroupLayout. GroupLayout is very very complicated by hand, but is very very easy with matisse in netbeans.

于 2010-06-19T12:31:34.450 回答
0

我觉得你的问题不是关于如何空间,而是关于何时以及多少空间。Sun Oracle 的Java Look and Feel Design Guidelines, 4:Visual Design侧重于逻辑分组,很少使用标题边框。这是一个来自游戏的具体例子

于 2010-06-19T17:11:46.753 回答