
- •Передмова
- •Розділ 1 об'єктний підхід у програмуванні
- •1.1.Причини виникнення ооп
- •1.1.1.Складність об'єкта дослідження
- •1.1.2.Складність процесу розробки програмного забезпечення
- •1.1.3.Складність опису окремих елементів
- •1.2.Парадигма ооп
- •1.3.Історія розвитку ооп
- •Розділ 2 об'єкти й класи: інкапсуляція
- •2.1.Структура об'єкта й класу
- •2.2.Особливості опису класів у мовах ооп
- •2.2.1.Опис класів в SmallTalk
- •2.2.3.Опис класів в Delphi
- •2.2.4.Опис класів в Java
- •2.3.Поля даних та їх ініціалізація
- •2.3.1.Визначення полів даних в SmallTalk
- •2.3.3.Визначення полів даних в Delphi
- •2.3.4.Визначення змінних в Java
- •2.4.Доступ до даних
- •2.4.1.Доступ до даних в SmallTalk
- •2.4.3.Доступ до даних в Delphi
- •2.4.4.Доступ до даних в Java
- •2.5.Спеціальні змінні
- •2.5.1.Спеціальні змінні в SmallTalk
- •2.5.3.Спеціальні змінні в Java
- •2.5.4.Спеціальні змінні в Delphi
- •2.6.Посилання
- •2.6.1.Визначення посилань в SmallTalk, Delphi і Java
- •2.7.Методи
- •2.7.1.Загальна схема визначення методу
- •2.7.2.Визначення методів в SmallTalk
- •2.7.4.Визначення методів в Delphi
- •2.7.5.Визначення методів в Java
- •2.8."Дружні" методи
- •2.8.2.Аналог дружніх функцій в Delphi
- •2.9.Конструктори й деструктори
- •2.9.1.Конструктори й деструктори в SmallTalk
- •2.9.3.Конструктори й деструктори в Delphi
- •2.9.4.Конструктори й деструктори в Java
- •2.10.Властивості
- •2.10.1.Властивості в Delphi
- •2.10.2.Властивості в Java
- •2.12.Абстрактні методи
- •Розділ 3 успадкування
- •3.1.Форми успадкування
- •3.2.Успадкування в SmallTalk
- •3.3.1.Віртуальне успадкування
- •3.3.2.Правило сумісності типів
- •3.3.3.Використання конструкторів і деструкторів при успадкуванні
- •3.4.Успадкування в Delphi
- •3.4.1.Ієрархія класів в Delphi
- •3.4.2.Створення нових компонентів
- •3.5.Успадкування в Java
- •3.5.1.Використання ключового слова super
- •3.5.2.Клас Object
- •Розділ 4 поліморфізм
- •4.1.Віртуальні методи
- •4.2.1.Механізм пізнього зв'язування
- •4.2.2.Таблиця віртуальних методів
- •4.3.Поліморфізм в Delphi
- •4.3.1.Заміщення віртуальних і динамічних методів
- •4.3.2.Приведення типів
- •4.4.Поліморфізм в Java
- •4.5.Поліморфізм в SmallTalk
- •5.1.Потокові класи
- •5.1.1.Ієрархія потокових класів
- •5.1.2.Форматоване введення/ виведення
- •5.1.3.Маніпулятори
- •5.1.4.Введення/виведення у файл
- •5.2.Контейнерні класи
- •5.2.1.Ітератори
- •5.2.2.Визначення контейнерних класів
- •5.2.3.Стандартні контейнерні класи
- •5.3.1.Параметиізовані класи (шаблони)
- •5.3.2.Ітератори stl
- •5.3.3.Узагальнені алгоритми
- •Література
- •Додатки лабораторна робота №1 об'єкти й повідомлення в smalltalk
- •Лабораторна робота №2 класи й методи в smalltalk
- •Листинг 3.1
- •Листинг 3.2
- •Листинг 3.3
- •Лабораторна робота 5 компоненти в delphi
- •Лабораторна робота 6 меню й вікна в delphi
- •Лабораторна робота 7 розробка меню в java
- •Лабораторна робота 8 робота з подіями в java
Лабораторна робота 8 робота з подіями в java
У Java всі події по суті є об'єктами й діляться на дві групи:
Події низького рівня. До них відносяться:
події від миші й клавіатури (натискання клавіші, натискання кнопки миші й т.д.);
події від компонента (зміна розміру, переміщення компонента й т.д.);
події від вікна операційної системи (закриття вікна, зміна його розмірів і т.д.);
події від контейнерів (зміна числа компонентів контейнера);
події від переміщення фокуса введення.
Семантичні події - це події високого рівня, що залежать від компонента, що породив цю подію. Такі події є більш складними, тому що складаються з одного або декількох подій низького рівня.
Обидва ці види подій є похідними від класу java.awt.AWTEvent. Рекомендується по можливості користуватися семантичними подіями, тому що вони виникають у всіх необхідних випадках. Наприклад, подія ActionEvent для кнопки JButton виникає у всіх випадках активізації кнопки, а не тільки при щиглику на ній мишею (подія низького ypoвня MouseEvent).
Середовище JBuilder використовує для обробки подій так звану модель очікуваних подій. Ця модель полягає в тому, що активізуються тільки ті події, які були оголошені об'єктами як очікувані. Таким чином, об'єкт реєструє блок прослуховування подій, обумовлений відповідним інтерфейсом. Ця реєстрація складається у виклику методу, що починається префіксом add, за яким іде ім'я блоку прослуховування. Імена блоків прослуховування закінчуються словом Listener. Для кожного компонента можна зареєструвати тільки один блок прослуховування.
Створення оброблювачів подій
Для того, щоб створити (або видалити) оброблювач події, ви можете скористатися вкладкою Events вікна інспектора компонентів. Для призначення коду обробки події якій-небудь події компонента виконайте наступні кроки:
виберіть компонент у вікні дизайнера або дереві компонентів, подія якого буде оброблятися, наприклад компонент jPanel1;
клацніть на вкладці Events вікна інспектора компонентів. У ньому відображені можливі оброблювані події для обраного компонента ;
виберіть потрібну подію (наприклад, при наведенні покажчика миші на строку mouseEntered) і двічі клацніть на ньому. Середовище JBuilder автоматично створить заготовку оброблювача події з ім'ям, що ставиться за замовчуванням. Крім того, буде автоматично зроблений перехід у вікно редактора вихідного коду, і курсор буде перебувати в тому місці, де необхідно вставити код обробки події;
вставте в оброблювач (між фігурними дужками заготовки) код закриття програми:
System.exit(0) ; // Завершення роботи програми
Тепер при виконанні програми, у випадку, якщо ви підведете курсор до панелі, буде зроблений вихід із програми.
При створенні оброблювачів подій для спливаючого меню виконайте наступні кроки:
Виберіть вкладку Event у вікні інспектора компонентів.
Двічі клацніть на тій події, по якій повинне з'являтися спливаюче меню для даного компонента. Наприклад, MouseClicked.
Введіть код оброблювача даної події, наприклад, для натискання правої кнопки миші:
void jPanel1_mouseClicked(MouseEvent e) {
//Компонент jPopupMenu повинен бути доданий при
//виникненні події
jPanel1.add(jPopupMenu1);
//Будемо перевіряти натискання правої кнопки миші
if (e.getModifiers() == Event.META_MASK) {
//Відобразимо компонент jPopupMenu з поточної позиції
//курсора миші
jPopupMenu1.show(jPanel1,e.getX(),e.getY());
}
}
Додайте код оброблювача для кожного з пунктів спливаючого меню.
Запустіть програму на виконання, натиснувши F9.
Вигляд вікна програми, що виконується, показаний на рис. 8.1.
Рис. 8.1. Вигляд вікна програми, що виконується
Розглянемо процес додавання коду обробки подій меню. Найпростіший спосіб це зробити – створити оброблювач події actionPerformed. Для цього на вкладці Design у вікні дерева компонентів знайдіть потрібний елемент меню й у вікні інспектора компонентів перейдіть на вкладку Events. Потім двічі клацніть мишею на події actionPerformed. У результаті цих дій у вихідний код вашого додатка буде автоматично доданий блок прослуховування (листинг 8.1):
Листинг 8.1.
//Блок прослуховування
jMenuItem2.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e) {
jMenuItem2_actionPerformed(e) ;
}
Для видалення непотрібного оброблювача події виконайте наступні дії:
Виберіть компонент, оброблювач події якого буде вилучатися;
виберіть вкладку Events вікна інспектора компонентів.
клацніть один раз лівою кнопкою миші на назві події, оброблювач якого повинен бути вилучений.
натисніть послідовно клавіші <Delete> і <Enter>. Середовище JBuilder видалить всі пов'язані з даною подією оброблювачі подій і блоки прослуховування.
Події бібліотеки Swing
Пакет javax.swing.event містить класи блоків, що прослуховують, і подій. Класи подій Swing перераховані нижче. Там же перераховані компоненти, що породжують дані події:
AncestorEvent – породжується об'єктами класу JComponent і виникає у випадку додавання, переміщення або видалення попереднього об'єкта;
СaretEvent – виникає у випадку переміщення курсору введення в текстовому полі;
ChangeEvent – породжується об'єктами класів AbstarctButton, DefaultBoundedRangeModel, DefaultButtonModel, DefaultCaret, DefaultSingleSelectionModel, FontChooser.Patch, JProgressBar, JSlider, JTabbedPane, JViewport, StandardDialog, StyleContext; дана подія виникає у випадку зміни стану компонента;
DocumentEvent – виникає у випадку зміни стану документа й породжується об'єктами класу AbstractDocument;
HyperlinkEvent – подія, що має відношення до гіпертекстових посилань;
InternalFrameEvent – подія пакета AWTEvent;
ListDataEvent – породжується об'єктами класу AbstractListModel і виникає у випадку зміни стану списку або додавання (видалення) інтервалу;
ListSelectionEvent – виникає у випадку зміни стану списку й породжується об'єктами класів DefaultListSelectionModel та JList;
MenuEvent – породжується об'єктами класу JMenu і виникає у випадку вибору команд меню;
PopupMenuEvent – виникає у випадку зміни стану спливаючого меню й породжується об'єктами класу jPopupMenu;
TableColumnModelEvent – породжується об'єктами класу DefaultTableColumnModel і виникає у випадку зміни моделі стовпця таблиці;
TableModelEvent – виникає у випадку зміни моделі подій й породжується об'єктами класу AbstractTableModel;
TreeExpansionEvent – породжується об'єктами класу DefaultTreeModel і виникає у випадку розкриття або згортання вузла дерева;
TreeModelEvent – виникає у випадку зміни моделі дерева.
Завдання для самостійної роботи:
Для розробленої програми, що виводить меню, створіть оброблювачі подій, які змінюють розміри вікна й колір вікна при виборі пунктів меню “Вигляд” і “Редагування”, відповідно.