java - 在 Swing 中控制间距

标签 java swing controls space

是否有关于 Swing 控件周围应该有多少空间的指南?还有一个问题是如何实现这一点:一些布局管理器支持控件之间的间隙;有些不需要,然后您必须使用 EmptyBorder – 这也可能很痛苦,因为边框不重叠并且您最终可能会在两个控件之间留出太多空间1 – 因此您可能需要省略边界的一侧。

另一个问题是外观:如果我使用明确的间隙或边框,它可能在一个 LAF 中看起来不错,但在另一个 LAF 中看起来很糟糕。例如,Nimbus 看起来很好,按钮挤在一起,因为它周围有额外的空间。默认的 Windows LAF 只是将它们塞在一起,没有任何额外的空间。我意识到这 本质上是一个平台问题,因为 Microsoft、Apple、Gnome 和其他公司 all have different guidelines on that topic .

因此,如果我随后在控件之间放置额外的空间以适应 Windows 或 Metal LAF,那么它在 Nimbus 和其他可能的系统中会变得太远。

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

简而言之:我怎样才能确保控件的间距合理且适合 LAF,而不会有太多麻烦?也许我只是忽略了这里的一些东西 – 的绝对大小 Swing 并非不可能。


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

最佳答案

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

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

但是这很麻烦。

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

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

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

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

关于java - 在 Swing 中控制间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3075217/

相关文章:

c# - 防止在 C# 中重绘控件?

java - JColorChooser 获取组件

java - 在 Android 上获取准确的电池电量

java - 如何更改消息框中字符串的颜色?

java - GridBagLayout 中的 JScrollPane 影响应用程序的大小

java - 如何在 Swing 中淡化图像?

c# - 如何在 C# 的 Webbrowser 控件中将 InnerText 转换为 InnerHtml?

java - 字节数组到 double 组

java - 使用 Java BigInteger 从 g^(xr) 和 x 计算 g^r

c# - 如何检测窗体上的所有控件使用了多少内存?