2010-06-19 87 views
3

Swing中应该有多少空间控制应该有什么指导原则?还有一个关于如何实现这个问题的问题:一些版面管理人员支持控件之间的差距;有些则不需要,那么你必须使用EmptyBorder--这也可能是一个痛苦,因为边界不重叠,最终可能会在两个控件之间留下太多空间 - 因此您可能需要忽略一个边界的一侧。Swing中的控制空间

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

因此,如果我在控件之间放置额外的空间以适应Windows或Metal LAF,它会在Nimbus和其他可能的地方分得太多。

然后就是如何构建你的用户界面的问题,这对你的间距和边界有多灵活有着严重的副作用。从这个角度来看,将所有内容放在一个容器中的效果非常好,但是如果您仍然需要对UI进行更改,那很糟糕。然后,用合适的布局管理器从几个JPanel构建UI。

总之:我怎样才能确保控制间隔很好,适合LAF,没有太多的麻烦?也许我只是在这里忽略了一些东西 - 与Swing的绝对大小并不是不可能的。


至少对我来说是一个问题 - 也许有一个可行的解决方案。但考虑到将两个控件放在一起的简单情况,并且您希望它们周围有五个像素的空洞 - 之间它们也只有五个像素,而不是十个。我看不出在普通情况下如何设计这种方式,而不根据书写方向创建不同的边框(因为左右两边不一定是控件的位置,但显然总是在边框的位置)。

回答

0

对于所有L & F和所有布局,您不能确定:这是您的目的和布局,而不是您的布局。

在秋千应用程序中,Usualy开发者选择布局,并且用户选择l & f。

布局永远不会改变边界(它是composant的一部分),但它们可以改变插入。所以使用你的布局,边框和插图的组合。

的BoxLayout的有填料RigidArea一个概念:看Using Invisible Components as Filler

SpringLayout有约束。见How to Use SpringLayout

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

+0

对不起,关于边界和插入的混乱,是的,我的意思是插入。那么多少空间是合适的?那么我该如何解决这样的问题:在另外一个LAF外观上看起来不错的间距看起来不错(因为一个不会在元件周围增加空间而另一个会增加空间)?如果LAF的目的是正确看待,那么几乎所有人都会做一件糟糕的工作。 – Joey 2010-06-19 12:43:21

+0

我不知道有多少空间是合适的:我不是设计师。关于l&f,选择标准并与他们一起工作。如果用户选择另一个,则是用户责任。 – Istao 2010-06-19 13:18:52

+0

\ o/hooray。指责用户糟糕的可用性听起来像是一种很好的处理这种情况的方式。我应该早点考虑一下。 – Joey 2010-06-19 15:01:07

1

我使用MigLayout解决了这个问题,该问题具有平台相关间隙。最重要的是,它提供了其他与平台相关的功能,例如按钮大小和顺序。

我强烈推荐它!

+0

不幸的是,对于我正在研究的项目,我们希望它尽可能地在没有外部依赖的情况下工作。然而,MiG Layout看起来非常好,我很乐意将它包含在Java 7中。尽管如此,我仍然不会改变我现在所做的每一个窗口,但我会在未来记住它:-) – Joey 2010-06-19 15:16:12

2

这些类型的指导方针都是平台,并且看起来依赖于感觉。

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

但是这很麻烦。

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

有了这样的LayoutManagers,您绝不应该自行设置任何尺寸或插槽,而是让它们为您完成工作。

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

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