Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Занятие 13.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
193.54 Кб
Скачать

На заметку:

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

Все перечисленные элементы условно можно разделить на два типа: компоненты и контейнеры. От контейнера компонент отличается тем, что может содержать (и, как правило, содержит) другие компоненты и контейнеры. Компонент, в свою очередь, для отображения на экране должен быть включен в состав контейнера. Поэтому, по крайней мере, один контейнер при создании графического интерфейса придется использовать. Если контейнеров в программе несколько, то один всегда является контейнером верхнего уровня, в котором содержатся все прочие компоненты и контейнеры.

Контейнеры, в свою очередь, делятся на два типа или две категории. Одну небольшую группу формируют контейнеры верхнего уровня. Им соответствуют классы JFrame, JWindow, JDialog и JApplet. Эти классы, через систему наследования, являются потомками класса Container библиотеки AWT.

Система наследования, в той части, которая касается четырех упомянутых классов JFrame, JWindow, JDialog и JApplet, следующая. В вершине иерархии находится класс Object. Его наследует класс Component. Класс Container является подклассом класса Component. Класс JApplet реализуется через схему наследования Container-Pane-Applet-JApplet. Три другие схемы наследования: Container>Window-JWindow, Container>Window^ Dialog^-JDialog, и Container//Window-Frame^JFrame. Классы, не содержащие начальной литеры J в названии, относятся к библиотеке AWT, то есть соответствуют "тяжелым" компонентам.

Эти четыре контейнера относятся к "тяжеловесным", и один из них обычно находится в вершине иерархии компонентов программы. Мы будем для этих целей пользоваться классом JFrame. На последующих занятиях, где обсуждаются апплеты, в качестве контейнера верхнего уровня будет использоваться класс JApplet.

Прочие контейнеры, которые образуют многочисленную группу, относятся к "легковесным". Они, как и обычные компоненты библиотеки Swing, являются потомками класса JComponent. Принципиальное отличие легковесного контейнера от обычного легковесного компонента состоит в том, что в контейнер могут добавляться компоненты (и контейнеры). Поэтому деление на контейнеры и обычные компоненты достаточно условное. Обычно понять, относится ли компонент к контейнерам, достаточно легко исходя из общего назначения компонента. Например, такой компонент, как панель (класс JPane), предназначен для размещения на нем компонентов. Понятно, что это контейнер. Кнопка (класс JButton) вряд ли будет содержать другие графические компоненты. Наоборот, она сама должна где-то размещаться. Поэтому кнопка к контейнерам не относится.

На заметку:

Класс JComponent является непосредственным потомком класса Container.

В табл. 1 приведен перечень классов библиотеки Swing, используемых для создания различных компонентов (в том числе и контейнеров).

Класс

Описание

JComboBox

Класс для создания раскрывающихся списков

JComponent

Суперкласс для классов компонентов

JDesktopPane

Контейнер, используемый для создания многодоку­ментного интерфейса

JDialog

Контейнер верхнего уровня для создания диалого­вых окон

JEditorPane

Класс для создания панели редактирования с под­держкой стилей

JFileChooser

Класс для создания диалогового окна выбора файлов

JFormattedTextField

Класс для создания поля редактирования с под­держкой форматирования

JFrame

Класс для создания окна

JI interna 1 Frame

Класс для создания внешнего окна, которое может содержать внутренние подокна

JLabel

Класс для создания меток

JLayeredPane

Класс для управления механизмом перекрытия ком­понентов

JList

Класс для создания списка

JMenu JMenuBar

Класс для создания стандартного меню Класс для создания меню верхнего уровня

JMenuItem

Класс для реализации пункта меню

JOptionPane

Класс для работы с основными типами диалоговых окон

JPanel-

Класс панели

JPasswordField

Класс для создания поля ввода пароля

JPopupMenu

Класс для создания контекстного меню

JProgressBar

Класс для создания индикатора хода процесса

JRadioButton

Класс для создания переключателя опции

JRadioButtonMenuItem

Класс для создания меню в виде переключателя опций

JRootPane

Класс корневой панели

JScrollBar

Класс для создания полосы прокрутки

JScrollPane

Класс для создания панели с полосой прокрутки

• JSeparator

Класс для создания разделителя в меню

JSlider

Класс для создания линейного регулятора

JSpinner

Класс для создания инкрементного регулятора (спи­сок с кнопками со стрелками, предназначенными для изменения значения в списке)

Класс

Описание

JSplitPane

Класс для создания специальной панели, состоящей из двух частей с подвижным разделителем

JTabbedPane

Класс для создания панели с вкладками

JTable

Класс для создания таблиц

JTextArea

Класс для создания текстовой области

JTextField

Класс для создания поля редактирования

JTextPane

Класс текстовой панели широкого спектра

JToggleButton

Класс для создания кнопки с двумя состояниями

JToolBar

Класс для создания панели инструментов

JToolTip JTree

Класс предназначен для реализации оперативных подсказок для элементов интерфейса

Класс для реализации древовидной иерархической структуры данных

JViewport

Класс реализации канала просмотра

JWindow

Контейнер для реализации окон (без строки назва­ния и системных пиктограмм)

Несложно заметить, что названия всех классов начинаются с литеры J. Для создания того или иного компонента в программе и размещения его в нужном месте необходимо фактически создать объект класса соответству­ющего компонента или его подкласса. Но этого мало. Необходимо также "оживить" компоненты графического интерфейса, то есть предусмотреть реакцию разных компонентов на действия пользователя. Для этих целей используется система обработки событий. Здесь отметим только общие принципы, а конкретную реализацию программного кода, в соответствии с этими принципами, будем изучать на примерах.

В принципе, для каждого компонента существует стандартный набор действий, на которые компонент может реагировать. В Java используется модель обработки событий с делегированием. Реализуется она по следующей схеме. В компонентах, с которыми что-то может происходить, регистрируются специальные обработчики событий. Когда в компоненте происходит событие, управление передается обработчику этого события, зарегистрированному в компоненте. Обработчик выполняет нужные действия и возвращает управление компоненту. В роли обработчика событий выступают объекты специальных классов. Эти классы создаются путем расширения интерфейсов, предназначенных для обработки того или иного события. Другими словами, для тех событий, которые могут происходить в компо­ненте, определены встроенные интерфейсы. Чтобы создать обработчик со­бытия, необходимо реализовать этот интерфейс в классе и создать объект этого класса. Такой объект может использоваться в качестве обработчика события. Все это в теории. Посмотрим, как такая схема реализуется на практике. Но для начала разберем наиболее простой пример, в котором обработка событий как таковая вообще отсутствует.

Создание простого окна

Рассмотрим пример, в котором создается очень простое окно. Окно не содержит ничего, кроме строки названия с именем окна и стандартными системными пиктограммами. Для создания окна используем класс контейнера JFrame. Обратимся к программному коду, представленному в листинге 1.

Листинг 1. Создание простого окна

import javax.swing.*; // Класс окна: class NewFrame{

// Конструктор класса: NewFrame(){

// Создание окна - объекта класса JFrame.

// Текстовый аргумент конструктора задает имя окна:

JFrame MyFrame=new JFrame("Новое окно");

II Установка размеров окна (в пикселях по ширине и высоте): MyFrame.setSize(300, 200) ;

// Реакция окна на щелчок на системной пиктограмме закрытия окна: MyFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Отображение окна: MyFrame.setvisible(true);

}}

public class NewFrameDemo{

public static void main(String[] args)(

// Анонимный объект класса NewFrame - объект окна: new NewFrame();}

}

Программа состоит из двух классов. Интерес представляет в первую очередь класс NewFrame, который является классом окна, которое создается и используется в программе. Этот класс состоит из единственного конструктора (кроме конструктора в классе NewFrame больше нет ни методов, ни полей). Поэтому функциональность класса полностью определяется кодом его конструктора. В конструкторе первой командой JFrame MyFrame =new JFrame ("Новое окно") создается объект MyFrame класса JFrame. Это и есть окно! Текстовый аргумент конструктора (фраза "Новое окно") задает название окна. Это название отображается в полосе названий окна. Но создать окно - мало. Необходимо выполнить настройку его параметров и отобразить окно на экране.

Для настройки параметров окна используются методы класса JFrame (), которые вызываются из объекта класса (объекта окна - в данном случае через объектную переменнуюMyFrame).Так,командойMyFrame.setSize (300, 200) задаются размеры окна. Первым аргументом методу setSize () передается целое число, определяющее ширину окна в пикселях. Второй аргумент мето­да setSize() - высота окна в пикселях. Кроме этого, нужно предусмотреть возможность убрать окно с экрана. Дело в том, что хотя системные пиктограммы в строке названия окна по умолчанию отображаются, закрытие окна с помощью соответствующей системной пиктограммы к завершению программы не приводит. Исправить ситуацию просто. Достаточно вызывать метод setDef aultCloseOperation (), указав аргументом константу из класса JFrame. Для того чтобы работа программы при щелчке на пиктограмме завершалась, передаем аргументом константу JFrame .EXIT_ON_CLOSE. Вся команда выглядит так: MyFrame. setDef aultCloseOperation (JFrame. EXIT_ON_CLOSE). В дальнейшем мы будем использовать такого типа команду достаточно часто (с поправкой на имя объекта). Наконец, для отображения окна на экране используем команду MyFrame. setvisible (true).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]