2012-01-08 76 views
2

我在Box(具有BoxLayout)中水平放置[OK]和[Cancel]按钮。稍后,我将此框添加到JDialog的内容窗格中的BorderLayout.PAGE_END。这在Windows中很适用,所以[确定]在[取消]左侧 - 就像我添加的一样。水平放置BoxLayout中的按钮,具体取决于操作系统

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

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

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

我想提一提,我就设定为L &˚F我的Swing应用程序到系统L & F.以下是我在main()

UIManager.setLookAndFeel第一行(UIManager.getSystemLookAndFeelClassName());

回答

2

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

你可以尝试改变挥杆的外观和风格: How to Set the Look and Feel

+0

是的,我的意思是Ubuntu Linux操作系统和GNOME。你是对的。 我已经在我的Swing应用程序中更改了L&F。以下是我在main()中的第一行() UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName()); 行为仍然存在。你能帮我吗? – txx28 2012-01-09 02:55:42

1

不,Java将不会自动为你做这个。

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

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

+0

谢谢。我将使用System.getProperty(“os.name”),并根据操作系统设计按钮,因为我的JDialog的设计已完成。不过,我会看看JGoodies。 – txx28 2012-01-09 13:33:20

0

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

例如,DesignGridLayout你会做:

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