2

我将 [OK] 和 [Cancel] 按钮水平放置在 Box(具有 BoxLayout)中。后来我将此框添加到 JDialog 的内容窗格中的 BorderLayout.PAGE_END 中。这在 Windows 中完美运行,因此 [OK] 位于 [Cancel] 的左侧 - 就像我添加的一样。

当我在 Linux 中测试时,按钮的位置与 Windows 相同 - [确定] 在 [取消] 的左侧。这再次来自代码。

但是,在 Linux (Ubuntu) 中,按钮的默认位置是 [OK] 左侧的 [Cancel]。这与我的代码和按钮位置形成鲜明对比。

所以,我的问题是:Java 是否有某种常量——比如 OS_PLACEMENT,它可以设置在某个地方,使 [Cancel] 按钮出现在 Linux 中 [OK] 的左侧?我问这个是因为我知道 Java 支持 RTL 和 LTR 布局的常量。因此,我认为,可能有一些与这种放置相关的常数。

我想提一下,我确实将 Swing 应用程序的 L&F 设置为 System L&F。以下是我在 main() 中的第一行

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

4

3 回答 3

2

当您说 Linux (Ubuntu) 时,您的意思是 Gnome,对吗?Gnome (Gtk) 的默认按钮位置 (OS) 是将取消按钮放置在左侧。

您可以尝试更改 Swing 的外观:如何设置外观

于 2012-01-08T11:35:45.233 回答
1

不,Java 不会自动为您执行此操作。

考虑使用免费的“ JGoodies Form ”库。它有一个名为“ButtonBarBuilder”的类,它将根据用户的操作系统以正确的顺序排列按钮。

否则,您必须手动检查 System.getProperty("os.name") 的值并根据该值布置按钮。

于 2012-01-09T11:48:13.730 回答
0

一些 LayoutManagers 会自动为您执行此操作,例如DesignGridLayout和 MigLayout 检测应用程序正在运行的操作系统,并根据它为 OK 和 Cancel(以及其他特定按钮)选择正确的位置。

例如,使用 DesignGridLayout 您可以:

DesignGridLayout layout = new DesignGridLayout(myDialog);
layout.row().bar().add(okButton, Tag.OK).add(cancelButton, Tag.CANCEL);
于 2012-01-10T14:47:33.610 回答