Окна и диалоговые панели |
Окна класса FrameНиже мы привели краткое описание класса Frame. Так как этот класс реализует интерфейс java.awt.MenuContainer, окно класса Frame может содержать меню. ПоляС помощью полей класса Frame вы можете задавать для своего окна различные типы курсоров: public final static int CROSSHAIR_CURSOR; public final static int DEFAULT_CURSOR; public final static int E_RESIZE_CURSOR; public final static int HAND_CURSOR; public final static int MOVE_CURSOR; public final static int N_RESIZE_CURSOR; public final static int NE_RESIZE_CURSOR; public final static int NW_RESIZE_CURSOR; public final static int S_RESIZE_CURSOR; public final static int SE_RESIZE_CURSOR; public final static int SW_RESIZE_CURSOR; public final static int TEXT_CURSOR; public final static int W_RESIZE_CURSOR; public final static int WAIT_CURSOR; КонструкторыДля класса Frame определено два конструктора: Создание окна без заголовка public Frame(); Создание окна с заголовоком public Frame(String title); Методы
Вызов метода createFrame public void addNotify(); dispose Удаление окна и освобождение связанных с ним ресурсов public void dispose(); getCursorType Определение типа курсора public int getCursorType();
Получение пиктограммы, установленной для окна public Image getIconImage();
Получение ссылки на главное меню public MenuBar getMenuBar();
Получение заголовка окна public String getTitle();
Определение возможности изменения размеров окна пользователем public boolean isResizable();
Получение строки параметров protected String paramString();
Удаление компоненты меню public void remove(MenuComponent m);
Установка типа курсора public void setCursor(int cursorType);
Установка пиктограммы public void setIconImage(Image image);
Установка главного меню public void setMenuBar(MenuBar mb);
Включение или выключение возомжности изменения размеров окна public void setResizable(boolean resizable);
Установка заголовка окна public void setTitle(String title); Применение класса FrameДля того чтобы создать свое окно на базе класса Frame, вы должны определить свой класс, унаследовав его от класса Frame следующим образом: class MainFrameWnd extends Frame { . . . public MainFrameWnd(String sTitle) { super(sTitle); . . . resize(400, 200); } . . . } Если мы будем создавать окно с заголовком, нам необходимо соответствующим образом определить конструктор класса этого окна. В частности, наш конструктор должен вызывать конструктор базового класса, передавая ему в качестве параметра строку заголовка окна. Напомним, что конструктор базового класса должен вызываться в конструкторе дочернего класса перед выполнением каких-либо других действий. Обратите также внимание на вызов метода resize. Этот вызов необходим для задания размеров окна. В конструкторе вы можете определить различные параметры создаваемого вами окна, например, указать форму курсора, пиктограмму, представляющую окно, задать меню, определить возможность изменения размеров окна и так далее. Мы остановимся подробнее на процедуре добавления меню к окну класса Frame, так как она требует пояснений. С изменением других характеристик окна вы справитесь самостоятельно. При создании окна классов Frame и Dialog для них устанавливается режим размещения BorderLayout. Если вам нужен другой режим размещения, необходимо установить его явным образом. Кроме того, созданное окно появится на экране только после вызова для него метода show. Убрать окно с экрана вы можете методом hide. Этот метод прячет окно, но оставляет в памяти все связанные с ним ресурсы, поэтому вы сможете вновь отобразить спрятанное окно, вызвав метод show. В отличие от метода hide, метод dispose удаляет окно и освобождает все связанные с ним ресурсы. Этот метод применяется для окончательного удаления окна с экрана и из памяти. Еще одно замечание касается обработки операции уничтожения окна при помощи двойного щелчка левой клавиши мыши по системному меню окна или при помощи кнопки уничтожения окна, расположенной в правой части заголовка. Когда пользователь пытается уничтожить окно класса Frame или Dialog подобным образом, возникает событие Event.WINDOW_DESTROY. Вы должны предусмотреть обработку этого события, выполняя действия, соответствующие логике работы вашего окна. Обычно окно уничтожается вызовом метода dispose, как это показано ниже: public boolean handleEvent(Event evt) { if(evt.id == Event.WINDOW_DESTROY) { dispose(); return true; } else return super.handleEvent(evt); } |