Изменение внешнего вида java без изменения приложения - PullRequest
3 голосов
/ 18 ноября 2008

Возможно ли изменить внешний вид java без изменения программы в реальных условиях?

Я знаю, что теоретически ответ - да. Я также создал демонстрационные приложения и изменил внешний вид даже во время выполнения, и это сработало. Но когда я создал реальное приложение с большим количеством элементов управления, изменение внешнего вида действительно не работало:

  • Разные взгляды и чувства имеют разные ошибки (или странные особенности). Например, некоторые из них создают одинаковый стиль для JTextField и JFormattedTextField, некоторые из них используют разные стили. Это изменение может быть довольно раздражающим для пользователей.
  • Размеры элементов управления не одинаковы (используются разные шрифты, разные границы), поэтому иногда окно выглядит некрасиво.
  • Сочетания клавиш также могут быть разными.
  • ...

В моих приложениях после изменения lookandfeel (фактически вместо того, чтобы изменять lookandfeel, я пытался использовать один и тот же lookandfeel с разными скинами), мне всегда приходится модифицировать приложение. Не очень большая модификация, но много маленьких модификаций, которые затрудняют изменение внешнего вида.

Мне просто не повезло с внешним видом, который я пробовал (в настоящее время использую skinlf ), или изменение внешнего вида не так просто, как в небольших демонстрационных приложениях?

ОБНОВЛЕНИЕ: я использую Swing, и переключение на другую библиотеку GUI сейчас невозможно для меня.

UPDATE2 : Мне кажется, вопрос не ясен. Я знаю, как изменить внешний вид. Мои вопросы: возможно ли создать реальное приложение, в котором изменение внешнего вида (или внешнего вида внешнего вида) является легкой задачей? В настоящее время, если я изменяю lookandfeel, недостаточно изменить 2 или 3 строки, я должен просмотреть все приложение и исправить немало проблем, вызванных изменением lookandfeel. Дхиллер предложил заменить skinlf на лучший внешний вид. Можете ли вы показать мне скины кожи, где замена кожи работает лучше?

Ответы [ 5 ]

2 голосов
/ 18 ноября 2008

Да, есть разные способы запустить ваше приложение с определенным видом и упасть без изменения кода вашего приложения. Самый простой способ - установить системное свойство при запуске вашего приложения. Например. если у вас есть сценарий оболочки или командный файл, запускающий ваше приложение, просто измените команду с

java -jar yourapp.jar

до

java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -jar yourapp.jar

-Dswing.defaultlaf = com.sun.java.swing.plaf.gtk.GTKLookAndFeel установит внешний вид по умолчанию для GTKLookAndFeel.

Существует также способ использования файла swing.properties вашей установки Java. Для более подробной информации посмотрите на это .

1 голос
/ 16 января 2010

Вы пытались настроить внешний вид на UIManager? Просто шучу. Если серьезно, то если вы измените внешний вид и приложение не будет выглядеть правильно, то это потому, что вы не используете LayoutManager правильно. Самый простой пример этого - использование нулевого менеджера макета. Этот подход не будет кроссплатформенным (крайний пример). В качестве техники разработки вы должны выполнять все ваши концептуальные тесты Swing с использованием различных lookAndFeels. В противном случае у вас возникнет соблазн «заставить вещи работать» в вашем приложении, но это не главное. На самом деле понимание макетов может быть тяжелой работой.

Тем не менее, некоторые вещи, такие как сочетания клавиш, всегда требуют особой обработки. Меню на Mac требуют особой обработки. И т. Д., А затем есть упаковка приложения.

Так что да, Java отлично подходит для небольших настольных демонстраций и требует работы, чтобы получить настоящее идеальное приложение.

1 голос
/ 18 ноября 2008

В целом, хорошей идеей для IMO является использование внешнего вида системы, чтобы не вводить пользователя в заблуждение, вводя новый внешний вид, когда он уже привык к внешнему виду платформы. Внешний вид платформы можно получить с помощью следующего кода.

  UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );

В любом случае, см. Изменение внешнего вида после запуска (Java-учебник) , это может помочь вам.

Кстати: может быть, вы используете неправильные менеджеры по расположению?

0 голосов
/ 18 ноября 2008

Если вашей конечной целью является внешний вид каждой целевой ОС, вы можете посмотреть на SWT . Это обеспечит собственные виджеты ОС, которые будут меняться вместе с внешним видом ОС.

Таким образом, пользователю не нужно изменять параметры вашего приложения, все, что ему нужно сделать, это изменить свою тему ОС, и эти изменения автоматически распространятся на ваше приложение.

0 голосов
/ 18 ноября 2008

Внешний вид должен изменять шрифты и поведение, это является основой системы внешнего вида: она должна вести себя как нативная ОС, и разные ОС имеют разные способы отображения вещей. Я должен признаться, что внешний вид "Java" (металлический или что-то в этом роде), как правило, более красив, чем во многих стандартных версиях ОС (возможно, он изменился через несколько лет с тех пор, как я в последний раз использовал Java). Я рекомендую вам по умолчанию использовать внешний вид ОС, потому что это сбивает с толку, если, например, меню «Открыть файл» не ведет себя так, как в любой другой программе (пользователи Windows, к сожалению, привыкли к несовместимому графическому интерфейсу, но пользователи Mac ожидают, что все программы вести себя правильно).

...