Читаем Java 7 полностью

После выполнения этих методов, если оконный менеджер может создавать окна без оформления и если текущий L&F способен оформлять окна, все создаваемые окна класса JFrame и JDialog будут оформлены текущим L&F, как показано на рис. 17.4.

Чтобы оформить отдельное окно верхнего уровня текущим L&F, надо сначала отключить его оформление оконным менеджером, а затем установить новый стиль оформления методом setWindowDecorationStyle(int) класса JRootPane:

JFrame fr = new JFrame(); fr.setUndecorated(true);

fr.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

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

Это свойство графических элементов библиотеки Swing получило название Pluggable Look and Feel, сокращенно — PL&F, PLAF или plaf.

Получение свойств L&F

Для получения свойств текущего L&F и установки нового L&F нужно заменить классы XxxLookAndFeel на класс UIManager из пакета javax.swing. Он содержит массу статических методов, позволяющих получить сведения об элементах L&F, изменить некоторые элементы или вообще сменить L&F.

Объект класса UIManager ищет название L&F сначала как значение системного свойства swing.defaultlaf, созданного, например, при запуске приложения из командной строки с ключом -d:

j ava -Dswing.defaultlaf=com.sun.j ava.swing.plaf.motif.MotifLookAndFeel

SomeSwingApplication

Если такое системное свойство не определено, объект ищет файл swing.properties, обычно лежащий в каталоге $JAVA_HOME/lib. Если он существует, то в нем отыскивается значение ключа swing.defaultlaf, например:

swing.defaultlaf=com.sun.j ava.swing.plaf.motif.MotifLookAndFeel

Если такого ключа нет или вообще отсутствует файл swing.properties, то устанавливается Java L&F.

Вы всегда можете создать или изменить файл swing.properties, записав в него другой L&F, например:

swing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel

После этого по умолчанию будет установлен Nimbus.

Для хранения свойств текущего L&F класс UIManager использует модель данных — объект класса UIDefaults. Класс UIDefaults расширяет класс Hashtable, следовательно, является хеш-таблицей, состоящей из пар "ключ — значение" (key — value). Кроме обычного для хеш-таблицы метода get(Object key), возвращающего значение value ключа key, и метода put(Object key, Object value), устанавливающего значение value с ключом key, класс UIDefaults содержит специализированные методы для определенных типов данных, хранящихся в таблице. Они позволяют избавиться от приведения типов, так надоедающего при вызове метода get(Object).

Например, метод getBoolean(Object key) возвращает значение ключа key, если оно имеет

тип boolean. Аналогично действуют методы getBorder(Object), getColor(Object), getDimension(Object), getFont(Object), getIcon(Object), getInsets(Object), getInt(Object), getString(Object). У каждого из них есть парный метод getXxx (Object, Locale), возвращающий значение ключа для данной локали.

Экземпляр класса UIDefaults, используемый в классе UIManager, — это закрытое (private) поле. Поэтому методы класса UIDefaults дублируются статическими методами класса UIManager с теми же именами.

Например, текущий шрифт, которым делаются надписи класса Jlabel, можно получить так:

Font labelFont = UIManager.getFont("Label.font");

Кроме того, статическим методом getDefaults() можно получить ссылку на экземпляр класса UIDefaults, используемый классом UIManager.

Просмотреть все несколько сотен свойств, хранящихся в модели данных UIDefaults, можно так:

UIDefaults defs = UIManager.getDefaults();

Enumeration keys = defs.keys();

Enumeration elem = defs.elements();

while (keys.hasMoreElements() && elem.hasMoreElements())

System.out.println(

keys.nextElement() + ": " + elem.nextElement());

Статический метод

put(Object key, Object value);

меняет только пользовательские установки различных свойств, оставляя установки L&F без изменения. Посмотреть установки L&F можно статическим методом

geLookAndFeelDefaults (), возвращающим экземпляр класса UIDefaults.

Для того чтобы легче переключать вид и поведение приложения, класс UIManager хранит несколько L&F под произвольно данными именами в виде массива объектов вложенного класса UIManager.LookAndFeelInfo. Новый элемент заносится в этот массив статическим методом

installLookAndFeel(String name, String className);

вызывающим конструктор класса UIManager.LookAndFeelInfo, или статическим методом

installLookAndFeel(UIManager.LookAndFeelInfo);

По умолчанию хранятся платформенные L&F, CDE/Motif, Nimbus и Java L&F. Посмотреть имена всех имеющихся в массиве L&F можно так:

UIManager.LookAndFeelInfo[] info = UIManager.getInstalledLookAndFeels(); for (int i = 0; i < info.length; i++)

System.out.println(info[i].getName());

Задание стандартного L&F

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных