Горизонтальное расположение кнопок в BoxLayout в зависимости от ОС - PullRequest
2 голосов
/ 08 января 2012

Я помещаю кнопки [OK] и [Отмена] горизонтально в Box (который имеет BoxLayout).Позже я добавлю этот блок в BorderLayout.PAGE_END на панели содержимого JDialog.Это прекрасно работает в Windows, поэтому [OK] слева от [Отмена] - так же, как я добавил.

Когда я тестирую в Linux, расположение кнопок такое же, как в Windows - [OK] слеваиз [Отмена].Это, опять же, следует из кода.

Однако в Linux (Ubuntu) расположение кнопок по умолчанию - [Отмена] слева от [OK].Это контрастирует с моим кодом и расположением кнопок.

Итак, мой вопрос: есть ли в Java какая-то константа, скажем OS_PLACEMENT, которую можно установить где-нибудь, из-за чего кнопка [Отмена] будет отображаться слева от [ОК] в Linux?Я спрашиваю об этом, потому что я знаю, что Java поддерживает константы для разметки RTL и LTR.Таким образом, я подумал, что могут быть некоторые константы, связанные с этим типом размещения.

Я хочу упомянуть, что я установил L & F моего приложения Swing на System L & F.Ниже приведена моя первая строка в main ()

UIManager.setLookAndFeel (UIManager.getSystemLookAndFeelClassName ());

Ответы [ 3 ]

2 голосов
/ 08 января 2012

Когда вы говорите, Linux (Ubuntu), вы имеете в виду Gnome, верно?Расположение кнопки по умолчанию (OS) в Gnome (Gtk) размещает кнопку «Отмена» слева.

Вы можете попытаться изменить внешний вид и ощущение качания: Как настроить внешний вид и ощущение

1 голос
/ 09 января 2012

Нет, Java не сделает это автоматически для вас.

Подумайте об использовании бесплатной библиотеки " JGoodies Form ". У него есть класс «ButtonBarBuilder», который будет располагать кнопки в правильном порядке в соответствии с операционной системой пользователя.

В противном случае вы должны вручную проверить значение System.getProperty ("os.name") и расположить кнопки в соответствии со значением.

0 голосов
/ 10 января 2012

Некоторые LayoutManager автоматически делают это за вас, например, DesignGridLayout и MigLayout определяют ОС, на которой запущено приложение, и на основании этого выбирают правильную позицию для OK и Отмена (а также других конкретных кнопки).

Например, с DesignGridLayout вы должны сделать:

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