Microsoft Visual J++. Создание приложений и аплетов на языке Java. Часть 2© Александр Фролов, Григорий ФроловТом 32, М.: Диалог-МИФИ, 1997, 288 стр. Структура комбинированных приложенийРассмотрим структуру комбинированного приложения Combi, полные исходные тексты которого мы привели ниже в этой главе. Главный класс комбинированного приложенияКласс Combi создан на базе класса Applet, что необходимо для обеспечения работы этого приложения под управлением навигатора Internet: public class Combi extends Applet { . . . public static void main(String args[]) { . . . } public String getAppletInfo() { . . . } public void init() { . . . } public void paint(Graphics g) { . . . } } Обратите внимание, что наряду с методами, которые обычно определяются аплетами, такими как getAppletInfo, init и paint, в классе комбинированного приложения определен метод main. Если приложение запускается как аплет, метод main не получает управления. Если же приложение запущено автономно, этот метод первым получает управление и выполняет все необходимые инициализирующие действия. Главное из этих действий - создание окна на базе класса Frame для размещения в нем аплета, создание аплета и вызов функций инициализации аплета. Ниже мы привели исходный текст метода main приложения Combi, созданный для нас системой Java Applet Wizard: public static void main(String args[]) { CombiFrame frame = new CombiFrame("Combi"); frame.show(); frame.hide(); frame.resize( frame.insets().left + frame.insets().right + 320, frame.insets().top + frame.insets().bottom + 240); Combi applet_Combi = new Combi(); frame.add("Center", applet_Combi); . . . applet_Combi.init(); applet_Combi.start(); frame.show(); } Прежде всего, метод main создает объект frame класса CombiFrame, определенного в нашем приложении на базе класса Frame (окно фрейма). Напомним, что класс Frame, который был нами описан в 30 томе “Библиотеки системного программиста”, позволяет приложениям Java создавать окна, напоминающие окна обычных приложений Windows. Метод show отображает окно фрейма. Далее в методе main выполняется изменение размеров окна фрейма, перед чем окно скрывается методом hide. Для изменения размеров окна применяется метод resize, которому через первый и второй параметры передаются новые значения, соответственно, ширины и высоты окна. Размеры окна устанавливаются с учетом размеров внешней рамки и заголовка окна, для чего применяется метод insets. Поля left и right объекта класса Insets, ссылку на который возвращает метод insets, содержат ширину, соответственно, левой и правой части рамки окна. Поле top содержит высоту верхней части рамки окна с учетом заголовка, а поле bottom - высоту нижней части рамки окна. Далее метод main делает нечто интересное - он создает аплет класса Combi: Combi applet_Combi = new Combi(); Когда приложение Java встроено в документ HTML как аплет, объект аплета создается автоматически навигатором при просмотре этого документа и добавляется в окно навигатора. В случае автономного приложения мы сами должны создать аплет и добавить его в окно фрейма. Добавление аплета в окно фрейма выполняется методом add: frame.add("Center", applet_Combi); В 30 томе “Библиотеки системного программиста” мы использовали этот метод для добавления компонент в окно контейнера, которым, в частности, является окно фрейма. Создав аплет, мы должны вызвать методы init и start, как это происходит при инициализации аплета, встроенного в документ HTML: applet_Combi.init(); applet_Combi.start(); Перед завершением своей работы метод main отображает окно фрейма, внутри которого теперь находится окна аплета: frame.show(); Класс фрейма для комбинированного приложенияТеперь о классе CombiFrame. Определение этого класса выглядит достаточно просто: class CombiFrame extends Frame { public CombiFrame(String str) { super (str); } public boolean handleEvent(Event evt) { switch (evt.id) { case Event.WINDOW_DESTROY: { dispose(); System.exit(0); return true; } default: return super.handleEvent(evt); } } } Класс CombiFrame создан на базе класса Frame и предназначен для создания окна фрейма, в которое будет добавлен аплет. В этом классе определен конструктор и метод handleEvent. Конструктор выполняет простую задачу - создание окна фрейма. Для этого он вызывает конструктор базового класса Frame, передавая ему через параметр строку заголовка окна. Задача метода handleEvent - удаление окна фрейма, когда пользователь пытается его закрыть, сделав, например, щелчок мышью по правой кнопке в заголовке окна. В случае такой попытки методу handleEvent передается извещение с кодом Event.WINDOW_DESTROY. В процессе обработки этого извещения метод handleEvent удаляет окно фрейма, вызывая метод dispose, а затем завершает работу приложения, вызывая статический метод exit из класса System. Все прочие извещения передаются методу handleEvent, определенному в базовом классе. |