МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САП
Створення графічних додатків в Java. Використання елементів управління AWT
Методичні матеріали
до лабораторної роботи № 5 з курсу:
“Об’єктно-орієнтоване програмування”
для студентів базового напрямку
6.0804 “Комп’ютерні науки”
Затверджено
на засіданні кафедри
“Системи автоматизованого проектування”
Протокол №
від
Львів 2007
Використання потоків в Java. Методичні матеріали до лабораторної роботи № 5 з курсу: “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки”.
Укладачі:
Макар В.М., доцент, к.т.н.
Загарюк Р.В., асистент.
Відповідальний за випуск:
Рецензенти:
1. МЕТА РОБОТИ
Метою роботи є придбання навиків програмування графічних додатків Java з використанням елементів управління AWT.
2.ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
3.6. Створення графічних додатків
Для створення графічних додатків в Java використовуються фрейми.
Фрейм (невидимий в початковий момент) можна створити або конструктором без параметрів
public Frame()
(без заголовка) або конструктором
public Frame(String frameTitle)
(із заголовком).
Після створення, перед відображенням фрейма на екрані, необхідно задати його розміри і положення на екрані, використовуючи методи
public void setSize(int x, int у)
public void setLocation(int x, int у)
Щоб фрейм став видимим або невидимим, необхідно звернутися до методу
public void is Visible(boolean visibility).
Стан фрейма (згорнутий або розгорнений) визначається за допомогою властивостей
public static final int Frame.ICONIFIED
public static final int Frame.NORMAL.
Поки фрейм існує (видимий чи ні), він займає частину ресурсів віконної системи, в якій виконується додаток або аплет. Якщо фрейм більше не потрібен, його слід знищити, використовуючи метод
public void dispose(),
визначений в класі Windows.
Поки фрейм існує (видимий чи ні), він займає частину ресурсів віконної системи, в якій виконується додаток або аплет. Якщо фрейм більше не потрібен, його слід знищити, використовуючи метод
public void dispose(),
визначений в класі Windows.
У класі Frame визначені наступні основні методи:
public String getTitle() і public void setTitle(String newTitle) - визначення і завдання заголовка, що відображається у верхній частині фрейма;
public void setResizable(boolean allowResizing) і public boolean isResizable() - установка або відміна заборони зміни розмірів фрейма і перевірка значення allowResizing;
public Image getIconImage() і public void setIconImage(Image image) - визначення і установка значка-зображення для даного фрейма;
public int getState() і public void setState(int state) - визначення і установка стану даного фрейма (стан рівний одній з двох констант, приведених вище).
Для створення графічного додатку необхідно виконати наступні дії:
1. Оголосити клас в додатку як клас, що розширює клас Frame.
2. Визначити в класі конструктор, в якому повинні бути задані наступні оператори:
2.1. super("ім'я"); - для виклику конструктора класу Frame.
2.2. setSize(ширина, висота); - установка розмірів вікна.
2.3. setLocation(координата-x, координата-y); - установка положення вікна на екрані.
2.4. addWindowListener(this); - додати блок прослуховування вікна з обробкою закриття вікна за допомогою методу windowClosing(), а також (при необхідності) інших методів інтерфейсу WindowListener або класу WindowAdapter;
2.5. setVisible(true); - зробити вікно видимим.
У конструкторі можуть бути визначені і інші необхідні дії.
3. Створити в методі main() за допомогою конструктора новий об'єкт класу, що розширює клас Frame і (при необхідності) виконати інші дії.
4. При необхідності виконати первинне промальовування вікна за допомогою методу paint().
Нижче приведений скелет програми - графічного додатку:
import java.awt.* ;
import java.awt.event.*;
public class GraphicApplication extends Frame
{
...
// Конструктор класу GraphicApplication
public GraphicApplication (String frameName)
// Виклик конструктора класу Frame
super(frameName);
// Додавання блоку прослуховування вікна
addWindowListener(
new WindowAdapter()
// Обробка закриття вікна
public void windowClosing
(WindowEvent e)
{
// Завершення програми
System.exit(0);
// Інші методи WindowAdapter
);
// Установка розміру фрейма
setSize(ширина, висота);
// Установка положення фрейма
setLocation(x, у);
// Зробити фрейм видимим
setVisible(true);
}
// Метод main()
public static void main(String args[])
// Створення нового об'єкту
// класу ApplicationExample
new GraphicApplication("имя_окна");
}
// Метод paint() (виконується при промальовуванні вікна)
public void paint(Graphics g)
// Виклик методів малювання
}
Можна також створити програму, яка запускатиметься і як додаток і як аплет. Для цього необхідно виконати наступні дії:
Крім класу, що розширює клас Applet, який запускає аплет, створити в тому ж або окремому файлі клас, що розширює клас Frame.
2. У класі, що розширює клас Applet, задати метод main(), у якому створюється об'єкт класу, що розширює клас Frame. Для цього об'єкту в методі main() також задається за допомогою методів setSize() і setLocation() розмір вікна додатку і за допомогою методу isVisible() це вікно робиться видимим.
2. Оголосити в класі, що розширює клас Frame, об'єкт класу, що розширює клас Applet.
3. Створити в класі, що розширює клас Frame, конструктор, що виконує наступні дії:
3.1. Виклик конструктора класу Frame.
3.2. Створення нового об'єкту класу, що розширює клас Applet.
3.3. Запустити для створеного об'єкту методи init() і start().
3.4. Додати створений об'єкт за допомогою методу add().
4. Для методу windowClosing() інтерфейсу WindowListener включити методи stop() і destroy() для створеного об'єкту класу, що розширює клас Applet.
Нижче приводиться скелет програми, яка може виконуватися і як додаток, і як аплет:
import java.applet.*;
import java.awt.* ;
import java.awt.event.*;
public class AppletAndApplication extends Applet
{
...
// Метод main()
public static void main(String args[])
// Оголошення нового об'єкту
// класу ApplicationFrame
ApplicationFrame windowForApplication =
new ApplicationFrame("ім'я");
// Установка розміру фрейма
windowForApplication.setSize(ширина, висота);
// Установка положення фрейма
windowForApplication.setLocation(x, у);
// Зробити фрейм видимим
windowForApplication.setVisible(true);
...
// Метод init()
public void init()
// Ініціалізація аплета
// Метод paint()
public void paint(Graphics g)
// Первинне промальовування вікна аплета
// або додатки
}
class ApplicationFrame extends Frame
{
// Оголошення змінної класу AppletAndApplication
private AppletAndApplication appletFrame;
// Конструктор класу ApplicationFrame
public ApplicationFrame(String frameName)
// Виклик конструктора класу Frame
super(frameName);
// Додавання блоку прослуховування вікна
addWindowListener(
new WindowAdapter()
// Обробка закриття вікна
public void windowClosing
(WindowEvent e)
{
...
// Зупинка аплета
appletFrame.stop();
// Знищення аплета
appletFrame.destroy();
// Завершення програми
System.exit(0);
);
// Створення нового об'єкту
// класу AppletAndApplication
appletFrame = new AppletAndApplication ();
// Ініціалізація аплета
appletFrame.init();
// Запуск аплета
appletFrame.start();
// Додавання аплета у фрейм
add(appletFrame);
}
3.2. Вставка зображення в графічний додаток
Для вставки зображення в графічні додатки використовуються методи
public abstract Image getImage(String filename)
public abstract Image getImage(URL url)
класу Toolkit з пакету java.awt.
Звернення до цих методів з компоненту виконується через метод
public Toolkit getToolkit()
класу Component, наприклад:
Image img =
getToolkit().getImage("D:\images\myimage.gif");
У загальному випадку звернення можна зробити через статичний метод
public static Toolkit getDefaultToolkit()
класу Toolkit, наприклад:
Image img =
Toolkit.getDefaultToolkit().getImage("D:\images\myimage.gif");
Але, окрім цих методів, клас Toolkit містить п'ять методів createImage(), що повертають посилання на об'єкт типу Image. Звичайно використовуються методи:
public abstract Image createImage (String fileName) - створює зображення з вмісту графічного файлу filename;
public abstract Image createImage (url address) - створює зображення з вмісту графічного файлу за адресою address.
Створене зображення так само, як і в аплеті, виводиться на екран одним з перенавантажуваних методів drawImage() класу Graphics.
3.3. Компоненти управління AWT і обробка подій
Разом із засобами малювання, використання кольорів і шрифтів в пакеті java.awt визначені також елементи управління.
Елементи управління (controls) - це компоненти, які надають користувачу різні способи взаємодії з додатком. Ці елементи реалізовані в наступних класах пакету java.awt:
Клас Button - кнопки;
Клас Label - текст;
Клас Checkbox - прапорці і перемикачі;
Клас Choice - списки, що розкриваються;
Клас List - списки;
Клас TextField - рядки введення;
Клас TextArea - поля введення;
Клас ScrollBar - смуги прокрутки;
Клас Canvas - малюнки.
На відміну від низькорівневих подій, семантичні події для компонент AWT визначаються для класів. Оскільки в інтерфейсах для семантичних подій визначений тільки один метод, тому для елементів управління немає необхідності у використанні абстрактних класів-адаптерів, як для низькорівневих подій.
3.3.1. Інтерфейс ActionListener і клас ActionEvent
Для класів Button, List і TextField визначений блок прослуховування ActionListener з єдиним методом
public void actionPerformed(ActionEvent e)
що викликається, коли відбувається дія для заданого об'єкту класу Button, List або TextField.
Клас ActionEvent обробляє події, пов'язані з натисненням кнопки, вибором елементу із списку або з натисненням клавіші Enter в текстовому полі.
Для класу ActionEvent визначені наступні статичні final змінні типу int:
ACTION_PERFORMED - дія відбулася;
ALT_MASK - натиснута клавіша Alt;
SHIFT_MASK - натиснута клавіша Shift;
CTRL_MASK - натиснута клавіша Ctrl;
ACTION_FIRST - перший номер в списку ідентифікаторів, використовуваних для подій дії;
ACTION_LAST - останній номер в списку ідентифікаторів, використовуваних для подій дії.
Методи
public String getActionCommand()
public int getModifiers()
public long getWhen()
public String paramString()
дозволяють одержати відповідно командний рядок, пов'язаний з даною дією; ключ-модифікатор для даної дії; час лічильника (у мілісекундах) для даної дії і рядок параметра, що ідентифікує дану дію (звичайно використовується для відладки).
3.3.2. Інтерфейси ItemListener, ItemSelectable і клас ItemEvent
Для класів Choice, Checkbox і List визначений блок прослуховування ItemListener з єдиним методом
public void itemStateChanged(ItemEvent e)
що викликається, коли відбувається вибір або відміна вибору елементів в об'єктах класу Choice, Checkbox або List.
Клас ItemEvent містить змінні і методи для обробки події, пов'язані з вибором елементу або відміною вибору елементу.
Для класу ItemEvent визначені наступні статичні final змінні типу int:
SELECTED - елемент вибраний;
DESELECTED - вибірка елементу відмінена;
ITEM_STATE_CHANGED - стан елементу змінений;
ITEM_FIRST - перший номер в списку ідентифікаторів, використовуваних для подій вибору елементу;
ITEM_LAST - останній номер в списку ідентифікаторів, використовуваних для подій вибору елементу.
Методи
public Object getItem()
public int getStateChange()
public String paramString()
дозволяють одержати відповідно елемент, що викликав подію; зміну стану елементу (вибраний або не вибраний) і рядок параметра, що ідентифікує вибір елементу (звичайно використовується для відладки).
Метод
public ItemSelectable getItemSelectable()
повертає об'єкт інтерфейсу ItemSelectable. Цей інтерфейс призначений для об'єктів, в яких допустимо вибір одного або більш елементів, і містить оголошення методів
public void addItemListener(ItemListener l)
public void removeItemListener(ItemListener l)
для додавання і видалення блоків прослуховування вибору або відміни вибору елементів із списку, а також метод
public Object[] getSelectedObjects(),
який повинен повертати масив вибраних об'єктів або null, якщо не вибрано жодного об'єкту.
3.3.3. Обробка семантичних подій
Включення блоку прослуховування, як і для низькорівневих подій, виконується за допомогою відповідного методу addXXXX(), наприклад, addActionListener(). Для операції включення необхідно вказати, для якого об'єкту AWT додається даний блок прослуховування, причому звичайно, як і для адаптера, метод блоку прослуховування перевизначається безпосередньо в параметрі відповідного методу addXXXX(), наприклад:
Button myButton;
myButton.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// Оператори, що реалізовують обробку натиснення
// кнопки myButton
}
}
);
Для завдання кольору переднього плану (кольори тексту), кольори фону і шрифту написів для елементів управління AWT можна використовувати відповідно методи
public void setForeground(Color з)
public void setBackground(Color з)
public void setFont(Font f).
Набути цього значення для елементу управління можна за допомогою методів
public Color getForeground()
public Color getBackground()
public Font getFont().
3.4. Клас Label
Текст (Label) є простим компонентом AWT. Він є інформаційним текстовим рядком. Для класу Label в AWT не визначено ніяких подій.
· Для створення інформаційного рядка можна використовувати один з трьох конструкторів:
· public Label()
· public Label(String text)
· public Label(String text, int alignment)
· Перший конструктор створює порожній рядок, другий - рядок із заданим в параметрі text текстом, а третій вирівнює створений рядок за допомогою параметра alignment. Для завдання вирівнювання при створенні об'єкту можна використовувати як значення другого параметра статичні змінні класу Label: LEFT, RIGHT і CENTER.
· Вирівнювання тексту можна змінити за допомогою методу:
public void setAlignment(int alignment).
· Щоб дізнатися, яке вирівнювання в даний момент встановлене, застосовується метод
public int getAlignment().
· Можна змінити текст в інформаційному рядку методом
public void setText(String text)
або прочитати текст з об'єкту Label за допомогою методу
public String getText().
3.5. Клас Button
Кнопки (Buttons) використовуються в панелях інструментів, діалогових вікнах, звичайних вікнах і навіть в інших компонентах, наприклад, смугах прокрутки.
· Створення кнопки з написом здійснюється за допомогою конструктора:
public Button(String label)
де параметр label задає текст, який буде виведений на кнопці.
Для створення кнопки без тексту треба використовувати конструктор без параметрів:
public Button()
· Після створення кнопки її необхідно додати в контейнер. Оскільки будь-який аплет вже є контейнером, можна додати кнопку безпосередньо в аплет або графічний додаток.
· Для зміни напису на кнопці необхідно використовувати метод:
public void setLabel(String label)
· Прочитати поточний напис можна за допомогою методу
public String getLabel().
· Метод
public void setActionCommand(String command)
дозволяє встановити ім'я команди для події пов'язаного з цією кнопкою. Якщо command задане рівним null, або ім'я команди для кнопки не встановлене, то ім'я команди береться рівним напису на кнопці. При обробці події в методі actionPerformed() можна одержати ім'я заданої команди можна за допомогою приведеного вище методу getActionCommand().
Включение/выключения блоку прослуховування зміни стану списку, що розкривається, проводиться за допомогою методів класу Button:
public void addActionListener(ActionListener l)
public void removeActionListener(ActionListener l).
Обробка події, пов'язаної з натисненням кнопки, виконується за допомогою приведеного вище методу actionPerformed() інтерфейсу ActionListener.
3.6. Клас Checkbox
Прапорець (Checkbox) багато в чому схожий з кнопкою, але має два стани: встановлений і скинутий (так і ні). При кожному клацанні по прапорцю він змінює стан на протилежний.
Прапорець складається з тексту і стану. Текст - це рядок, який виводиться поряд з самим прапорцем, а стан - логічна змінна, вказуюча, встановлений прапорець або скинутий. У початковий момент прапорець скинутий, тобто стан має значення false.
Прапорець можна створити за допомогою одного з наступних конструкторів класу Checkbox:
public Checkbox() - створює прапорець без тексту;
public Checkbox(String label) - створює прапорець з текстом;
public Checkbox(String label, boolean state) - створює прапорець з текстом і спочатку заданим станом (true - прапорець включений, false - вимкнений);
Якщо створюється саме прапорець, а не перемикач, параметр group повинен бути рівний null.
Перемикач (Radiobutton) є різновидом прапорця. Перемикачі також мають два стани (включений і вимкнений), але вони завжди об'єднуються в групи. У будь-який момент може бути включений тільки один перемикач з групи. Не існує окремого класу RadioButton. Натомість для створення групи перемикачів необхідно створити відповідну кількість перемикачів і об'єднати їх в групу. Конструктор класу CheckboxGroup не має аргументів:
public CheckboxGroup()
Створивши об'єкт класу CheckboxGroup, можна поміщати в цю групу прапорці, передаючи об'єкт CheckboxGroup як параметр конструктору класу Checkbox за допомогою наступних конструкторів класу Checkbox:
public Checkbox(String label, CheckboxGroup group, boolean state) - створює прапорець з текстом, первинною установкою і вказівкою, до якої групи відноситься даний перемикач;
public Checkbox(String label, boolean state, CheckboxGroup group) - є варіантом попереднього конструктора.
При об'єднанні перемикачів в групу останній з перемикачів, створених з параметром true, матиме стан включений, інші - вимкнений.
Для отримання і установки напису для прапорців і перемикачів використовуються відповідно методи
public String getLabel()
public void setLabel(String label).
Методи
public boolean getState()
public void setState(boolean state)
використовуються відповідно для отримання і установки поточного стану прапорців і перемикачів.
Метод
public Object[] getSelectedObjects()
повертає масив завдовжки 1, що містить текст об'єкту Checkbox, якщо об'єкт вибраний або null, якщо об'єкт не вибраний.
Методи
public CheckboxGroup getCheckboxGroup()
public void setCheckboxGroup(CheckboxGroup g)
відповідно визначають або встановлюють групу для перемикачів.
Включение/выключения блоку прослуховування зміни стану списку, що розкривається, проводиться за допомогою методів класу Checkbox:
public void addItemListener(ItemListener l)
public void removeItemListener(ItemListener l).
Зміна стану прапорця пов'язана з класом ItemEvent. Для обробки події ItemEvent повинен бути реалізований інтерфейс ItemListener і визначений приведений вище метод itemStateChanged(). Включение/выключения блоку прослуховування для зміни стану прапорця проводиться за допомогою методів інтерфейсу ItemSelectable: addItemListener() і removeItemListener().
3.7. Клас Choice
Список (Choice), що розкривається, - це компонент, що забезпечує вибір текстового рядка з меню, що розкривається. Вибраний рядок відображається на екрані. Список, що розкривається, реалізується класом Choice.
Щоб створити меню для списку, що розкривається, слід спочатку створити об'єкт класу Choice. Єдиний конструктор цього класу
public Choice()
задає порожній список, наприклад:
Choice myChoice = new Choice();
Створивши список, що розкривається, можна додавати в нього рядки методом
public void add(String item)
(у кінець списку) або методом
public void insert(String <C:jdk1.3docsapijavalangString.html> item, int index)
(після заданого в параметрі індексу).
Одержати рядок списку в заданій позиції index можна за допомогою методу
public String getItem(int index).
Після додавання всіх елементів розкриваючого списку у виведення аплета або додатку за допомогою методу add() класу Container повинен бути доданий і сам список, наприклад
add(myChoice);
Можна також вказати (по індексу або за змістом), який рядок повинен бути спочатку вибрана:
public void select (int pos)
public void select(String str)
За допомогою методів
public void remove(int position)
public void remove(String item)
public void removeAll()
можна видалити відповідно елемент списку із заданим індексом position; елемент списку із заданим ім'ям item або всі елементи списку.
Для обробки події ItemEvent, пов'язаного з вибором елементу або елементів із списку, що розкривається, повинен бути реалізований описані вище інтерфейс ItemListener і метод itemStateChanged().
Обробка події ItemEvent проводиться за допомогою наступних методів класу Choice:
public int getItemCount() - повертає число елементів в списку, що розкривається;
public int getSelectedIndex() - повертає індекс вибраного елементу розкриваючого списку;
public String getSelectedItem() - повертає значення вибраного елементу розкриваючого списку;
public Object[] getSelectedIndex() - повертає масив об'єктів (завдовжки 1), що містить вибраний елемент розкриваючого списку.
Включение/выключения блоку прослуховування зміни стану списку, що розкривається, проводиться за допомогою методів класу Choice:
public void addItemListener(ItemListener l)
public void removeItemListener(ItemListener l).
3.8. Клас List
Клас List дозволяє створити список (List) значень, з яких можна вибирати одне або декілька. При необхідності (якщо список не поміщається повністю у виділеному полі) забезпечується прокрутка списку.
При створенні списків є дві можливості. Конструктор
public List()
створює список, який не дозволяє одночасно вибирати більше одного елементу.
Можна також встановити кількість елементів, які одночасно видно у вікні списку за допомогою конструктора
public List(int rows)
а також вирішити або заборонити вибирати декілька елементів одночасно з допомогою конструкторів:
public List(int rows, boolean multipleMode)
де параметр rows задає кількість видимих елементів, а параметр multipleMode указує, чи вирішувати вибір більш ніж одного елементу.
Метод
public boolean isMultipleMode()
дозволяє визначити, чи є даний список списком з множинним вибором, а метод
public void setMultipleSelections(boolean b)
дозволяє вирішити або заборонити одночасний вибір декількох елементів.
Створивши список, можна додавати в нього нові елементи за допомогою методу
public void add(String item).
Можна також вставити елемент в певне місце списку за допомогою методу
public void add(String item, int index)
(елементи списку нумеруються з нуля).
Встановлення первинного стану елементу списку (вибраний або не вибраний) виконується за допомогою методів
public void select(int index)
і
public void deselect(int index)
(за умовчанням, елемент списку не вибраний).
Після додавання всіх елементів розкриваючого списку у виведення аплета або додатку за допомогою методу add() класу Container повинен бути доданий і сам список.
Іноді потрібний, щоб певний елемент був видно у вікні. Для цього слід передати індекс елементу методу
public void makeVisible(int index).
Отримання відомостей про список і його елементи проводиться за допомогою наступних методів:
public String getItem(int index) - повертає ім'я елементу списку із заданим індексом;
public String[] getItems() - повертає масив імен елементів списку;
public int getItemCount() - повертає кількість елементів в списку.
Так само, як і для класу Choice, за допомогою методів
public void remove(int position)
public void remove(String item)
public void removeAll()
можна видалити відповідно елемент списку із заданим індексом position; елемент списку із заданим ім'ям item або всі елементи списку.
Обробка подій, пов'язаних з вибором елементів списку може проводитися за допомогою реалізації інтерфейсу ItemListener в методі itemStateChanged() і/або за допомогою реалізації інтерфейсу ActionListener в методі actionPerformed().
Обробка події ItemEvent або ActionEvent проводиться за допомогою наступних методів класу List:
public int getSelectedIndex() - повертає індекс вибраного елементу списку;
public String getSelectedItem() - повертає значення вибраного елементу списку;
public String[] getSelectedItems() - повертає масив значень вибраних елементів списку;
public int getSelectedIndex() - повертає індекс вибраного елементу списку;
public int[] getSelectedIndexes() - повертає масив індексів вибраних елементів списку;
public Object[] getSelectedIndex() - повертає масив об'єктів, що містить вибрані елементи списку;
public boolean isIndexSelected(int index) - повертає значення true, якщо елемент з даним індексом вибраний і false інакше.
Включение/выключения блоку прослуховування проводиться за допомогою методів класу List:
public void addItemListener(ItemListener l)
public void removeItemListener(ItemListener l)
public void addActionListener(ActionListener l)
public void removeActionListener(ActionListener l).
3.9. Класи TextField і TextArea
Для введення рядка тексту AWT надає компонент поле введення (TextField), представлений класом TextField.
Простий спосіб створення поля введення - використання конструктора без параметрів
public TextField().
Він створює порожній рядок введення невизначеної довжини. Якщо потрібно задати число символів в рядку на екрані, можна скористатися іншим конструктором
public TextField (int columns).
Якщо ж потрібно створювати поля введення, які спочатку вже містять деякий текст, то можна скористатися конструктором
public TextField(String text).
І, нарешті, ще один конструктор
public TextField (String text, int columns)
дозволяє задати і початковий текст поля введення і число символів в рядку.
Додавання текстового поля в додаток або аплет виконується за допомогою методу add() класу Container.
У класі TextField визначені наступні методи:
public int getColumns() і public void setColumns(int columns) - отримання і установка кількості символів в текстовому полі;
public void setText(String text) - введення тексту в текстове поле;
public void setEchoChar(char з), public char getEchoChar() і public boolean getEchoCharsSet() - установка, отримання і перевірка символу луни, тобто символу, який виводитиметься в текстовому полі замість будь-якого символу, що вводиться (використовується для введення пароля).
Клас TextField може використовувати блок прослуховування KeyListener для обробки подій, пов'язаних з введенням символу в текстове поле, проте для нього звичайно використовується інтерфейс ActionListener для прослуховування подій, пов'язаних з натисненням клавіші Enter. Включення і виключення цього блоку прослуховування виконується за допомогою методів
public void addActionListener(ActionListener l)
public void removeActionListener(ActionListener l)
визначених в класі TextField.
Іноді, замість обробки події закінчення введення, краще застосувати кнопку, яку потрібно натиснути після закінчення введення тексту в полі (особливо, якщо необхідно заповнити декілька рядків введення).
Для введення декількох рядків тексту використовується компонент AWT область введення (TextArea), представлений класом TextArea.
Конструктори створення областей введення практично співпадають з конструкторами створення поля введення за винятком того, що при завданні розміру поля введення необхідно задати не тільки число символів в рядку, але і число рядків.
Порожнє поле введення з невизначеними розмірами створюється конструктором
public TextArea().
Поле введення, що містить текст, створюється конструктором
public TextArea (String text).
Поле введення з фіксованими розмірами задається за допомогою конструктора
public TextArea(int rows, int columns).
Є також конструктор для створення поля введення фіксованих розмірів, що містить заданий текст
public TextArea (String text, int rows, int columns).
І, нарешті, конструктор
public TextArea (String text, int rows, int columns
int scrollbars)
додатково задає режими виведення смуг прокрутки, визначені в класі TextArea з допомогою наступні статичні final змінні типу int:
SCROLLBARS_BOTH - і горизонтальна і вертикальна смуги прокрутки;
SCROLLBARS_HORIZONTAL_ONLY - тільки горизонтальна смуга прокрутки;
SCROLLBARS_VERTICAL_ONLY - тільки вертикальна смуга прокрутки;
SCROLLBARS_NONE - без смуг прокрутки.
Додавання текстової області в додаток або аплет виконується за допомогою методу add() класу Container.
У класі TextArea визначені наступні основні методи:
public int getColumns() і public void setColumns(int columns) - отримання і установка кількості символів в текстовій області;
public int getRows() і public void setRows(int rows) - отримання і установка кількості рядків в текстовій області;
public void append(String text) - додавання тексту в кінець текстової області;
public void replaceRange(String str, int start, int end) - заміна тексту в області, починаючи з символу поля з індексом start і закінчуючи символом поля з індексом end.
Звичайно після заповнення всього текстового поля його вміст вводиться за допомогою кнопки (в цьому випадку за допомогою методу
public String getText()
класу Component можна одержати вміст текстового поля).
3.КОНТРОЛЬНІ ЗАПИТАННЯ
Які атрибути дескриптора <applet> є обов'язковими для запуску аплета?
Які інструментальні засоби можна використовувати для проглядання аплета Java?
Які методи класу Applet дозволяють одержати інформацію про аплет?
Яка система координат використовується для малювання і виведення тексту в графічному режимі?
Які геометричні фігури можна малювати за допомогою методів класу Graphics?
Які методи маніпуляції з об'єктами визначені в Java?
Як можна задавати кольори в Java?
Які методи заповнення замкнутих геометричних фігур визначені в Java?
Як задаються характеристики шрифту, що виводиться, в Java?
Як виводиться напис в графічному режимі, і які параметри можна задати для напису?
Як в Java можна визначити ширину рядка, що виводиться, в пікселях?
Як функціонує модель делегування подій в Java?
Які методи визначені в Java для обробки подій миші і клавіатури?
Які дві групи подій визначені в Java, і чим вони відрізняються один від одного?
Які блоки прослуховування визначені для низькорівневих подій в Java?
Як реалізується включення блоку прослуховування в програмах Java?
Які дії необхідно виконати в програмі, для того, щоб вона могла обробляти події?
Як реалізується обробка подій за допомогою адаптерів?
Як можна вставити зображення в аплет?
4.ЛАБОРАТОРНЕ ЗАВДАННЯ
Напишіть аплет на мові Java по одному з приведених нижче варіантів.
5.ЗМІСТ ЗВІТУ
Мета роботи.
Короткі теоретичні відомості.
Постановка задачі індивідуального завдання.
Файли проекту.
Аналіз результатів результати виконання програми.
Висновки.
6. СПИСОК РЕКОМЕНДОВАНОЇ ЛІТЕРАТУРИ
Bruce Eckel, Thinking in Java, 2nd Edition, 2000.
ДОДАТОК
Варіант 1
Малювання ліній в графічному вікні. Лінії починаються при натисненні кнопки миші і продовжується при перетягуванні миші до тих пір, поки кнопка миші не буде відпущена.
Варіант 2
Малювання прямокутників в графічному вікні. При натисненні кнопки миші фіксується лівий верхній кут прямокутника. При відпуску миші фіксується правий нижній кут прямокутника, і прямокутник промальовувався на екрані.
Варіант 3
Переміщення зображення в графічному вікні. Спочатку зображення знаходиться в центрі вікна. При натисненні однієї з клавіш стрілок вгору, вниз, вліво або управо зображення стрибкоподібно переміщається в цьому напрямі.
Варіант 4
Малювання багатокутників в графічному вікні. При клацанні мишею фіксується чергова точка багатокутника. При подвійному клацанні мишею дана крапка з'єднується з першою точкою багатокутника і малювання багатокутника закінчується.
Варіант 5
Виведення символу клавіатури в заданій точці графічного вікна. Спочатку вводиться символ, а потім за допомогою клацання миші фіксується крапка, в якій виводиться символ.
Варіант 6
Висновок в лівому верхньому кутку графічного вікна поточних координат миші (x,y) при її переміщенні.
Варіант 7
Зміна фігури в графічному вікні. При натисненні клавіш 't'('T'), 's'('S') або 'o'('O') у вікні повинні з'являтися відповідно закрашений трикутник, квадрат або еліпс. При натисненні клавіші 'n'('N') фігура повинна віддалятися з вікна.
Варіант 8
Зміна кольору закрашеного прямокутника із закругленими кутами в графічному вікні. При натисненні клавіш 'r'('R'), 'g'('G') або 'b'('B') фігура повинна міняти колір зафарбовування відповідно на червоний, зелений або синій колір. При натисненні клавіші 'n'('N') фігура повинна бути кольори фону.
Варіант 9
Перетягування фігури закрашеного прямокутника в графічному вікні. При натисненні кнопки миші на фігурі і переміщенні миші фігура переміщається услід за мишею. При відпуску кнопки миші позиція фігури фіксується.
Варіант 10
Переміщення фігури закрашеного трикутника в графічному вікні. Спочатку фігура знаходиться в лівому верхньому кутку. При клацанні мишею в якій-небудь точці вікна аплета фігура поміщається в цю крапку.
Варіант 11
Зміна кольору закрашеного трикутника в графічному вікні. При клацанні мишею усередині фігури, трикутник циклічно міняє свій колір на червоний, синій, зелений і колір фону.
Варіант 12
При клацанні мишею по закрашеному прямокутнику із закругленими кутами в графічному вікні з'являється напис "Включено", а при повторному клацанні - напис "Вимкнено".
Варіант 13
При натисненні символу на клавіатурі цей символ виводиться в рядок в графічному вікні. При натисненні клавіші Enter висновок продовжується з нового рядка.
Варіант 14
При клацанні мишею по зображенню в графічному вікні воно міняється на інше зображення такого ж розміру, а при повторному клацанні відновлюється первинне зображення.
Варіант 15
При клацаннях мишею по закрашеному прямокутнику в графічному вікні він стрибкоподібно збільшує свої розміри до певної межі, а потім також стрибкоподібно зменшує свої розміри до первинного розміру.
Варіант 16
Переміщення закрашеного прямокутника в графічному вікні. При натисненні клавіш із стрілками вгору, вниз, управо і вліво прямокутник переміщається в заданому напрямі або поки клавіша натиснута, або після досягнення межі вікна аплета.
Варіант 17
Зміна кольору рамки навколо зображення в графічному вікні. При клацанні по зображенню колір рамки навколо зображення циклічно міняється на червоний, синій, зелений колір і колір фону.
Варіант 18
Переміщення тексту (написи) у вікні графічному вікні. Спочатку напис знаходиться в лівому верхньому кутку. При клацанні мишею в якій-небудь точці вікна аплета напис поміщається в цю крапку.
Варіант 19
Заповнення графічного вікна фігурами. При клацанні мишею в якій-небудь точці вікна аплета в цій крапці повинен з'являтися невеликий закрашений квадрат.
Варіант 20
Перетягування зображення в графічному вікні. При натисненні кнопки миші на зображенні і переміщенні миші зображення переміщається услід за мишею. При відпуску кнопки миші позиція зображення фіксується.
Варіант 21
Малювання еліпсів в графічному вікні. При натисненні кнопки миші фіксується лівий верхній кут
прямокутника, описаного навколо еліпса. При відпуску миші фіксується правий нижній кут прямокутника, і еліпс промальовувався на екрані.
Варіант 22
Перетягування тексту (написи) в графічному вікні. При натисненні кнопки миші на написі і переміщенні миші напис переміщається услід за мишею. При відпуску кнопки миші позиція напису фіксується.
Варіант 23
При клацаннях мишею по зображенню в графічному вікні воно стрибкоподібно збільшує свої розміри до певної межі, а потім також стрибкоподібно зменшує свої розміри до первинного розміру.
Варіант 24
Переміщення зображення в графічному вікні. Спочатку зображення знаходиться в центрі вікна. При клацанні мишею в якій-небудь точці вікна аплета зображення поміщається в цю крапку.
Варіант 25
Зміна кольору тексту (написи) в графічному вікні. При натисненні клавіш 'r'('R'), 'g'('G') або 'b'('B') напис повинен міняти колір зафарбовування відповідно на червоний, зелений або синій колір. При натисненні клавіші 'n'('N') напис повинен бути кольори фону.
Варіант 26
Малювання ламаних ліній в графічному вікні. При клацанні мишею (окрім першого клацання) крапка з'єднується прямою лінією з попередньою крапкою. При подвійному клацанні мишею малювання ламаної лінії закінчується.
Варіант 27
Зміна шрифту напису в графічному вікні. При натисненні клавіш 'a'('A'), 't'('T') або 'c'('C') напис повинен міняти шрифт відповідно на Arial, Times New Roman або Courier New. При натисненні клавіші 'n'('N') напис повинен виводитися шрифтом за умовчанням.
Варіант 28
Зміна розміру напису в графічному вікні. При кожному клацанні мишею по напису вона циклічно збільшує свої розміри від початкового розміру 10pt на 2pt (до 20pt), а потім зменшує розмір до початкового розміру.
Варіант 29
Малювання закрашеного прямокутника в графічному вікні. Спочатку за допомогою клавіш 'r'('R'), 'g'('G') або 'b'('B') задається червоний, зелений або синій колір прямокутника. Потім при першому клацанні мишею фіксується лівий верхній кут прямокутника, а при другому клацанні мишею - правий нижній кут.
Варіант 30
При клацанні мишею в графічному вікні виводяться написи про координати миші (кожен новий напис виводиться праворуч від попереднього напису).