Как сделать так, чтобы Java-приложения выглядели нативными в Windows?

Можно ли использовать Java для создания приложений, которые выглядят нативными в Windows? Меня не волнует, является ли решение переносимым или нет, потому что я планирую ориентироваться только на пользователей Windows. Я использую Scala, если это имеет значение.

Извините за отсутствие подробностей, но я никогда раньше не использовал Java, поэтому я даже не уверен, возможно ли это.


person ryeguy    schedule 19.10.2009    source источник
comment
Разрабатывать их в .NET? Извините, не удержался. ;)   -  person dkackman    schedule 20.10.2009
comment
Я согласен, что встроенные элементы управления важны. В каждом успешном массовом приложении используются собственные элементы управления. У вас есть два варианта (1) использовать набор виджетов, например Swing, который пытается имитировать нативный вид. Это никогда не работает полностью, иногда это совершенно ужасно. (2) использовать набор виджетов, такой как SWT, который представляет собой оболочку Java вокруг (в основном) собственных виджетов. Это работает отлично. Отсутствие такого пакета, как SWT, в базовом дистрибутиве обречено на провал Java в клиенте. (Да, я знаю, что Java пользуется большим успехом на сервере и на некоторых корпоративных рабочих столах.)   -  person DigitalRoss    schedule 20.10.2009


Ответы (8)


try {
    // Set the Look and Feel of the application to the operating
    // system's look and feel.
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (ClassNotFoundException e) {
}
catch (InstantiationException e) {
}
catch (IllegalAccessException e) {
}
catch (UnsupportedLookAndFeelException e) {
}

Это должно настроить Look and Feel на внешний вид системы. Вы бы сделали это перед любым кодом вашего графического интерфейса. Например, в вашем методе main.

Если вы хотите узнать больше о Look and Feels, я бы посмотрел Учебник по Java по ним, как предложила автомойка.

person Thomas Owens    schedule 19.10.2009
comment
В этом ответе подразумевается использовать Swing для элементов управления. Это общепринятая мудрость Java и официальный пакет Sun, и никто не может быть обвинен в том, что он советовал это. Однако вы не получите нативных элементов управления, а поддельные никого не обманут. Sun должна была принять SWT, когда Eclipse предложила им его бесплатно. Как бы то ни было, Sun предлагает только виджеты (Swing и AWT), которые не подходят для настольных клиентских приложений, и в результате у них почти ничего нет, и, похоже, Swing как бы отброшен, кроме того, что он продолжает хромать. - person DigitalRoss; 20.10.2009
comment
Я использую Swing, и меня обманывают фальшивые элементы управления. Объясните, почему Swing не выглядит и не работает как Windows, если вы используете этот код. - person Thomas Owens; 20.10.2009
comment
На Mac это отстой, на самом деле довольно плохо. - person AlBlue; 21.10.2009
comment
@Thomas Owens, хорошо, как насчет выбора файлов в Windows. Он выглядит по-другому, отличается фокус клавиатуры, не создает каталоги таким же образом, не переходит в созданный каталог, выбирает файл, когда я набираю return, а не вхожу в выбранный каталог, делает выбор по-другому, не учитывает систему конфигурации шрифта и не соответствует соглашению о системных значках. - person DigitalRoss; 25.10.2009
comment
DigitalRoss: Я не вижу разницы между ними, когда вы используете внешний вид системы. - person Thomas Owens; 25.10.2009
comment
@ThomasOwens На самом деле между ними есть четкая разница. Сравните внешний вид Java Swing с стандартный внешний вид Windows. - person Pieter; 27.05.2012
comment
@ThomasOwens Это красиво; Я не знаю почему, но по какой-то причине простое копирование и вставка этого в мой основной метод подняло мне настроение. Я все еще планирую взглянуть на SWT когда-нибудь в будущем, но сейчас это не так срочно. Спасибо! - person Abdul; 16.04.2014

Все остальные публиковали сообщения о Swing, так что я собираюсь сыграть адвоката дьявола и упомянуть SWT.

SWT — это набор инструментов для виджетов, созданный фондом Eclipse. Это тонкая оболочка над родным графическим интерфейсом системы... для Windows, OSX и различных разновидностей *nix (Linux, AIX, BSD? и т.д...).

Это противоположный путь, по которому пошел JFC/Swing компании Sun. компоненты.

person Powerlord    schedule 19.10.2009
comment
Мне любопытно, в чем преимущество использования SWT над Swing вне разработки Eclipse RCP. Я считаю, что большинство операционных систем покрываются UIManager.getSystemLookAndFeelClassName(), так зачем мне для этой цели использовать внешнюю библиотеку? - person Thomas Owens; 20.10.2009
comment
Я не много занимался разработкой настольных приложений, но главное преимущество заключается в том, что он использует собственную библиотеку рендеринга ОС, а не рисует свои собственные компоненты, как это делает Swing. - person Powerlord; 20.10.2009
comment
Хороший SWT высокого уровня против Swing здесь: developer.com/java/other/article.php/10936_2179061_2/ - person Smalltown2k; 20.10.2009
comment
Ну, зачем кому-то Swing? Он содержит все ошибки, характерные для Swing, и не имеет преимуществ, характерных для каждой ОС. Когда вы используете SWT, вы оптимально используете средства графического интерфейса ОС, и ваши приложения не выглядят так, как будто они принадлежат ОС. Они принадлежат к ОС. - person Daniel C. Sobral; 20.10.2009
comment
Хм, посмотрим. Я мог бы использовать Swing, который полностью пытается подделать родной виджет, но никогда не работает точно правильно, а иногда даже не работает близко к правильному. Обычно это выглядит как последний выпуск родной ОС, за исключением случаев, когда он выглядит как два прошлых выпуска. ИЛИ я мог бы использовать SWT, который, какая замечательная идея, НА САМОМ ДЕЛЕ ВЫЗЫВАЕТ СОБСТВЕННЫЙ ВИДЖЕТ, который быстрее, надежнее, чего ожидает пользователь, и всегда выглядит точно так же, как работающая версия ОС, потому что она работающий релиз ОС. - person DigitalRoss; 20.10.2009
comment
Основная проблема с SWT заключается в том, что он хорошо выглядит только в Windows, поэтому, если вы пытаетесь разработать приложение для WIndows и OSX, вам придется дважды создавать графический интерфейс. - person Paul Taylor; 30.08.2012
comment
Хотя этот ответ устарел, в Java теперь есть библиотека JavaFX, которая действует как Swing 2.0. - person Powerlord; 17.12.2015

См. здесь: Учебные пособия по Java™: как настроить внешний вид

try {
    // Set System L&F
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} 
catch (UnsupportedLookAndFeelException e) {
   // handle exception
}
person Community    schedule 19.10.2009

Вы должны использовать внешний вид Windows.

Вы можете указать его в командной строке:

java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel MyApp

Или в коде

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Вот подробности: Как настроить внешний вид

person OscarRyz    schedule 19.10.2009

Странно, что никто еще не упомянул JGoodies.

Внешний вид JGoodies Windows фокусируется на точной эмуляции Windows 95/98/NT/ME/2000 в следующих областях: меню, значки, цвета, границы, шрифты, размеры шрифтов, вставки и размеры виджетов. Он учитывает разрешение экрана (96 точек на дюйм против 120 точек на дюйм) для настройки размеров, вставок и размеров виджета. (Источник)

person fglez    schedule 21.10.2009

Да, Java имеет родной для Windows внешний вид, доступный в Windows. Посмотрите, как изменить свой внешний вид, и это должно привести вас в правильном направлении.

person Michael Ekstrand    schedule 19.10.2009

Вы бы сделали что-то вроде:

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

(Конечно, это работает только в Windows.) Результат выглядит достаточно родным. Дополнительная информация, например. здесь.

person Jonik    schedule 19.10.2009
comment
Это будет работать только в Windows. Если бы вы работали в другой системе, выбрасывался бы UnsupportedLookAndFeelException. - person Thomas Owens; 20.10.2009
comment
Обратите внимание, что OP сказал, что я планирую ориентироваться только на пользователей Windows. И да, я опустил try-catch, чтобы сосредоточиться на главном. (Это проверенное исключение, поэтому компилятор напомнит всем, кто забыл его из реального кода :) - person Jonik; 20.10.2009

Вам следует использовать собственный Look&Feel.

person St.Shadow    schedule 19.10.2009