Swing中的控制间距

时间:2010-06-19 10:48:57

标签: java swing controls space

是否有针对Swing应该有多少空间控制的指导原则?还有一个问题是如何实现这一目标:一些布局管理者支持控制之间的差距;有些人不这样做,你必须使用EmptyBorder - 这也可能是一种痛苦,因为边界不会重叠,你可能会在两个控制之间留出太多空间 1 - 所以你可能需要遗漏边界的一边。

另一个问题是外观和感觉:如果我使用明确的间隙或边界,它可能在一个LAF中看起来很好但在另一个LAF中看起来不好。例如,Nimbus看起来很好,按钮夹在一起,因为它周围有额外的空间。默认的Windows LAF只是将它们组合在一起而没有任何额外的空间。我意识到这个 本质上是一个平台问题,因为微软,Apple,Gnome和其他人all have different guidelines on that topic

因此,如果我在控件之间放置额外的空间以容纳Windows或Metal LAF,那么它在Nimbus和其他可能的其他位置间隔太远。

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

简而言之:我怎样才能确保控件间隔得很好并且适合LAF,没有太多的麻烦?也许我只是在这里忽略一些东西 - 的大小摇摆不太可能。


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

4 个答案:

答案 0 :(得分:2)

这些指导方针既具有平台性,又具有外观和感觉依赖性。

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

然而,这非常麻烦。

您可以考虑使用直接支持该功能的LayoutManager。有些人建议使用MigLayout,你也可以看看DesignGridLayout,这使得组件间距对开发人员来说完全透明。

使用这样的LayoutManagers,你不应该自己设置任何尺寸或插图,但让他们为你完成工作。

此外,选择正确的PLAF很重要,因为间距可能会根据显示器的分辨率而改变(如果所选PLAF不支持Hi-DPI屏幕,则可能会出现丑陋行为)。

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

答案 1 :(得分:1)

我使用MigLayout解决了这个问题,{{3}}具有平台相关的差距。最重要的是,它提供了其他平台相关的功能,如按钮大小和序列。

我强烈推荐它!

答案 2 :(得分:0)

对于所有L& F和所有布局,您无法确定:它是l& f和布局的目的,而不是您的。

通常,在swing应用程序中,开发人员选择布局,用户选择l& f。

布局永远不会改变边界(它是合成器的一部分),但它们可以改变插图。因此,请使用布局,边框和插图的组合。

BoxLayout的概念是填充 RigidArea :请参阅Using Invisible Components as Filler

SpringLayout有约束。请参阅How to Use SpringLayout

GroupLayout使用间隙。你可以阅读How to Use GroupLayout。 GroupLayout手工非常复杂,但在netbeans中使用matisse非常容易。

答案 3 :(得分:0)

我觉得你的问题不是如何到空间,而是关于多少到空间时更多。 Sun Oracle的Java Look and Feel Design Guidelines, 4:Visual Design侧重于逻辑分组,不遗余力地使用标题边界。这是来自example的具体game