BoxLayout中按钮的水平放置取决于操作系统

时间:2012-01-08 11:22:26

标签: java linux swing look-and-feel boxlayout

我将[OK]和[Cancel]按钮水平放置在一个Box(有BoxLayout)中。稍后我将这个Box添加到JDialog的内容窗格中的BorderLayout.PAGE_END。这在Windows中非常适用,因此[确定]在[取消]的左侧 - 就像我添加的那样。

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

但是,在Linux(Ubuntu)中,按钮的默认位置是[确定]左侧的[取消]。这与我的代码和按钮位置形成对比。

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

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

中的第一行

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

3 个答案:

答案 0 :(得分:2)

当你说Linux(Ubuntu)你的意思是Gnome,对吗?默认情况下,按钮放置(操作系统)Gnome(Gtk)将取消按钮放在左侧。

您可以尝试更改Swing的外观: How to Set the Look and Feel

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

例如,使用DesignGridLayout,您可以:

DesignGridLayout layout = new DesignGridLayout(myDialog);
layout.row().bar().add(okButton, Tag.OK).add(cancelButton, Tag.CANCEL);