Связь с приложениями пользователя устанавливается через операционную систему, поэтому экземпляр класса Desktop создается не конструктором, а статическим методом getDesktop (). Эту связь удается установить не во всех системах, поэтому предварительно следует сделать проверку статическим логическим методом isDesktopSupported(). Итак, создание экземпляра класса Desktop выглядит так:
Desktop d = null; if (Desktop.isDesktopSupported()) d = Desktop.getDesktop();
Вызвать каждое из перечисленных ранее приложений тоже удается не всегда, поэтому перед обращением к какому-либо методу класса Desktop имеет смысл сделать проверку логическим методом
public boolean isSupported(Desktop.Action action);
Аргументом этого метода может служить одна из следующих констант вложенного перечисления Action:
□ browse — у пользователя есть браузер по умолчанию;
□ MAIL — у пользователя есть почтовый клиент по умолчанию;
□ EDIT — можно открыть текстовый редактор, связанный с файлами;
□ OPEN — можно открыть файл;
□ PRINT — можно напечатать файл.
С учетом этой проверки, обращение к методам класса Desktop будет выглядеть так:
if (d.isSupported(Desktop.Action.BROWSE))
d.browse(new URI("http://www.bhv.ru"));
if (d.isSupported(Desktop.Action.MAIL)) d.mail();
if (d.isSupported(Desktop.Action.EDIT))
d.edit(new File("/home/user/j ava/src/MyDesktop.j ava");
if (d.isSupported(Desktop.Action.OPEN))
d.open(new File("/home/user/j ava/src/MyDesktop.j ava");
if (d.isSupported(Desktop.Action.PRINT))
d.print new File("/home/user/java/src/MyDesktop.java");
Графическое приложение Java может установить ярлык в зоне уведомлений (notification area), называемой также системным лотком (system tray) или просто треем. Эта зона обычно размещается в правом нижнем углу экрана и содержит часы и ярлыки запущенных программ. Для работы с зоной уведомлений в пакет java.awt включен класс SystemTray. Его метод add(Trayicon icon) помещает ярлык icon в зону уведомлений, а метод remove (Trayicon icon) удаляет его из зоны. Каждое приложение может поместить в зону уведомлений несколько ярлыков.
Как видно из заголовков, параметр этих методов, ярлык- это объект класса TrayIcon.
Он создается конструктором класса. Объект активен — он может реагировать на события, такие как действия мыши, открывая, например, всплывающее меню после щелчка на ярлыке правой кнопкой мыши или меняя изображение при наведении на него курсора мыши. Обработка таких событий описана в
Как и при действиях с приложениями пользователя, не каждая система позволяет управлять зоной уведомлений. Поэтому работа с этой зоной связана с проверками и выглядит следующим образом:
TrayIcon icon = null; if (SystemTray.isSupported()){
SystemTray tray = SystemTray.getSystemTray();
Image im = Toolkit.getDefaultToolkit.getImage("myicon.gif"); icon = new TrayIcon(im); tray.add(icon);
}
Более подробно работа с зоной уведомлений показана в документации к классу SystemTray. Она будет понятна после прочтения
Очень часто при загрузке приложения на экране вначале появляется небольшое окнозаставка (splash screen) с каким-нибудь изображением, сменяемое затем главным окном приложения. Такое окно можно открыть при запуске приложения из командной строки, указав ключ -splash. Например, если файл с изображением называется name.gif, то запустить приложение можно так:
java -splash:name.gif SimpleFrame
При запуске приложения из архива, например
java -jar SimpleFrame.jar
имя файла с изображением записывается в файл MANIFEST.MF, как показано в
Некоторые возможности управления окном-заставкой предоставляет класс SplashScreen из пакета java.awt. Это возможность менять изображение методом setImageURL(URL image) и возможность рисовать в окне, получив ссылку на объект класса Graphics2D методом createGraphics (). После заполнения окна-заставки оно выводится на экран методом update (). Все это делается по следующей схеме:
SplashScreen splash = SplashScreen.getSplashScreen(); if (splash != null){
Graphics2D g = splash.createGraphics();
g.setPaintMode();
g.drawString("Loading...", 100, 200);
// и т. д., рисуем, как написано в
}
Заключение
Как видите, библиотека графических классов AWT очень велика и детально проработана. Это многообразие классов только отражает многообразие задач построения графического интерфейса. Стремление улучшить интерфейс безгранично.
Оно приводит к созданию все новых библиотек классов и расширению существующих. Независимыми производителями создано уже много графических библиотек Java: KL Group, JBCL, SWAT, SWT и появляются все новые и новые библиотеки. Сведения о них можно получить на сайтах, указанных во
В следующих главах мы подробно рассмотрим, как можно использовать библиотеки AWT и Swing для создания собственных приложений с графическим интерфейсом пользователя, изображениями, анимацией и звуком.
Вопросы для самопроверки
1. Что такое графический интерфейс пользователя?