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

Java BoxLayout中按钮的水平位置取决于操作系统,java,linux,swing,look-and-feel,boxlayout,Java,Linux,Swing,Look And Feel,Boxlayout,我将[OK]和[Cancel]按钮水平放置在一个框中(具有BoxLayout)。稍后,我将此框添加到JDialog内容窗格中的BorderLayout.PAGE_END。这在Windows中非常有效,所以[OK]在[Cancel]的左边,就像我添加的一样 在Linux中测试时,按钮的位置与Windows相同-[Cancel]左侧的[OK]。这也是源于代码 但是,在Linux(Ubuntu)中,按钮的默认位置是[OK]左侧的[Cancel]。这与我的代码和按钮的位置形成了对比 所以,我的问题是:J

我将[OK]和[Cancel]按钮水平放置在一个框中(具有BoxLayout)。稍后,我将此框添加到JDialog内容窗格中的BorderLayout.PAGE_END。这在Windows中非常有效,所以[OK]在[Cancel]的左边,就像我添加的一样

在Linux中测试时,按钮的位置与Windows相同-[Cancel]左侧的[OK]。这也是源于代码

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

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

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

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())

你说Linux(Ubuntu)是指Gnome,对吗?Gnome(Gtk)的默认按钮放置(OS)是将取消按钮放置在左侧

您可以尝试更改Swing的外观和感觉:
不,Java不会自动为您执行此操作

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


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

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

例如,使用DesignGridLayout,您可以执行以下操作:

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

是的,我指的是Ubuntu Linux和GNome。你是对的。我已经在我的Swing应用程序中更改了L&F。下面是我在main()UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())中的第一行代码;行为仍然存在。你能帮忙吗?谢谢。我将使用System.getProperty(“os.name”)我的JDialog设计完成后,我会按照操作系统来布置按钮。不过,我会看看JGoodies。