Изменение внешнего вида Java без изменения приложения

Можно ли изменить внешний вид Java без изменения программы в реальной среде?

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

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

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

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

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

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


person asalamon74    schedule 18.11.2008    source источник


Ответы (5)


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

java -jar yourapp.jar

to

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. Дополнительные сведения см. в этом.

person reallyinsane    schedule 18.11.2008
comment
Это не отвечает на мой вопрос. Не могли бы вы прочитать весь мой вопрос. - person asalamon74; 18.11.2008

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

  UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );

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

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

person Daniel Hiller    schedule 18.11.2008

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

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

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

person Dan Rosenstark    schedule 15.01.2010

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

person Stein G. Strindhaug    schedule 18.11.2008
comment
Конечно, я хотел бы использовать внешний вид, который ведет себя как родная ОС (в моем случае Windows). Но есть много внешнего вида для той же ОС. Предположим, что моим пользователям надоел текущий голубоватый дизайн, и они предпочитают зеленый с другими значками. - person asalamon74; 18.11.2008
comment
Затем вы можете добавить опцию для изменения значения по умолчанию. Окна LAF синеватые? В прошлый раз, когда я проверял, это был уродливый серый стиль win 2000, если он теперь действительно поддерживает (а. 2) темы окон, пользователь может просто изменить свою тему окон. Почему у каждой программы должна быть своя тема? - person Stein G. Strindhaug; 18.11.2008

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

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

person James Van Huis    schedule 18.11.2008
comment
К сожалению, я забыл упомянуть, что я использую Swing, и переход на SWT (хотя это звучит интересно) для меня сейчас не вариант. Я отредактирую свой вопрос, чтобы показать эту информацию. - person asalamon74; 18.11.2008