|
AWT Ръководство
Графичен Потребителски
Интерфейс
Java осигурява библиотека с
класове наречена Abstract Window
Toolkit (AWT), които съдържа различни
графични форми. Можете да добавяте тези
форми към видимата част на приложението
си и да ги позиционирате със средства
за управление на разположението.
Основи на AWT
Всички обекти на Графичния
Потребителски Интерфейс се коренят в
суперкласа Component.
Йерархия на класовете в AWT
Аплет - демонстриращ
поведението на различните компоненти:
За да създадете GUI,
трябва да поставите компоненти в обект
от класа Container Тъй като
Container е също Component,
контейнерите могат да бъдат разполагани
в други такива. При създаването на GUI,
най-често като контейнер за основа се
използва Panel. Всеки
компонент използва системен код за
визуализирането си. Ако стартирате Java
приложението под Windows или друга операционна
система, използваните бутони в него ще
бъдат истински бутони на Windows или
съответната операционна система.
Аплети и Приложения
Аплетът представлява Java програма,
която се стартира в уеб страница, докато
приложната програма се стартира от
командния ред. Applet e
Panel, който автоматично
се вписва в уеб страница. Браузерът
стартира страницата и добавя аплета
към посоченото място. Браузерът казва
на аплета кога да създаде неговия
GUI(като извиква init()
метода от класа Applet) и
кога да стартира(start())
и спре(stop()). Приложенията
се стартират от конзолата(command
prompt). В този случай интерпретаторът
извиква метода main() на
приложението.
Базова логика на GUI
Три са стъпките при създаването на
GUI приложение или аплет:
Композиране на GUI
чрез добавяне на компоненти към обект
от класа Container.
Задаване на прихващачи
на събитията, които да отговарят на
активността на потребителя.
Визуализиране на GUI(става автоматично
при аплетите, но при приложенията трябва
да бъде осъществено).
Когато се визуализира GUI, интерпретаторът
стартира нова нишка, за да следи за
активността на потребителя. Тази нишка
очаква за натискане на бутон, движение
мишката или друга активност на системата,
която може да повлияе на състоянието
на GUI. Когато бъде отчетено такова събитие
се извиква някой от прихващачите на
събития, които са зададени към GUI.
Отбележете, че кодът свързан с
прихващането на събитието се изпълнява
от същата нишка, която следи
за поява на събития! (Това е съществена
точка, на която ще бъде обърнато внимание
при разглеждането на събитията.) Също
така съществуването на тази нишка дава
възможност main метода при приложенията,
просто да завърши изпълнението си, след
като е предизвикал визуализацията на
GUI.
Примери
Следващият прост пример създава
аплет.
|
|
import java.awt.Button; import
java.applet.Applet;
public class AButton extends Applet
{ public void init() {
//
стъпка 1: Композиране на GUI Button
beepButton = new Button("Beep");
add(beepButton);
// стъпка 2: задаване прихващачите
на събития beepButton.addActionListener(new
Beeper());
// стъпка 3: Визуализиране
на GUI (автоматично -- това е аплет) }
}
|
|
В стъпка 2 от показаното, прихващача
на събитията се задава чрез добавяне
на инстанция от класа Слушатели
(listeners) към бутона. В този
пример класа слушател имплементира
ActionListener (защото Button
го изисква). Когото бутонът бъде натиснат,
той извиква метода actionPerformed()
на класа слушател. Прихващането на
събитието се дискутира по-късно в този
модул. При положение, че искате да
предизвикате звука "бийп" при
натискане на бутона, трябва на дефинирате
прихващането на събитието както следва:
|
|
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent; import
java.awt.Component;
public class Beeper implements
ActionListener { public void
actionPerformed(ActionEvent event) { Component
c = (Component)event.getSource(); c.getToolkit().beep();
} }
|
|
Извикването на метода actionPerformed()
предизвиква звука "бийп" на вашия
компютър (ако той е способен да издава
звуци).
За да пробвате този аплет,
създайте проста HTML страница по модела:
|
|
<html> <applet
code=AButton.class width=100 height=100> </applet>
</html>
|
|
След това тествайте страницата
като стартирате appleteviewer
или зареждайки HTML файла в браузер, който
поддържа Runtime Environment (JRE).
Имайте предвид, че браузера трябва на
поддържа най-малко версия 1.1 на JRE, тъй
като прихващането на събитията се
осъществява отпърво в тази версия.
AWT Компоненти
Всички AWT компоненти наследяват класа
Component. Повечето, но не
всички, го наследяват директно.
Бутони
Button е едноредов етикет
и може да бъде активиран чрез натискане
с мишката.
|
|
import java.awt.*; import
java.applet.Applet;
public class ButtonTest extends Applet
{ public void init() { Button
button = new Button("OK"); add(button);
} }
|
|
Обърнете внимание, че в този пример
няма добавен прихващач на събитието.
При натискането на бутона няма да се
случи нищо. AWT бутоните не поддържат
директно изображения, както е при
етикетите.
Canvas
Canvas е графичен компонент,
представящ региона, където могат да се
визуализират форми като правоъгълници,
кръгове, текстови низове. Името идва от
платното за рисуване. Canvas
се наследява, за да се пренапише неговият
подразбиращ се метод paint()
по отношение на интересуващите ни
компоненти.

Може
да се наследи Canvas, за да
е осигури графика в аплет.
|
|
import java.awt.Canvas; import
java.awt.Graphics;
class DrawingRegion extends Canvas
{ public DrawingRegion() { setSize(100, 50); } public
void paint(Graphics g) { g.drawRect(0, 0, 99, 49); //
рисува граница g.drawString("A
Canvas", 20,20); }
|
|
След което тази графика, по подобие
на останалите компоненти, се добавя към
родителския контейнер, в примера, в
класа наследяващ Applet.
|
|
import java.applet.Applet;
public
class CanvasPaintTest extends Applet { public
void init() { DrawingRegion
region = new DrawingRegion(); add(region);
} }
|
|
Класът Canvas често
е наледяван, за да се съдадът нови типове
компоненти - например бутони с изображения.
Така или иначе, от JRE 1.1 насетне е възможно
директно да се наследи Component,
за да се създаде нова форма.
CheckBox
CheckBox е етикет с малък
бутон с отметка. Стойностите му могат
да бъдат истина (true) ако
отметката е поставена или лъжа (false)
ако не е. По подразбиране стойността е
лъжа. Кликането върху бутона променя
неговата стойност.

|
|
import java.awt.*; import
java.applet.Applet;
public class CheckboxSimpleTest extends
Applet { public void init() {
Checkbox m =
new Checkbox("Allow Mixed Case"); add(m);
} }
|
|
За да се зададе стойност "истина"
при инициализирането на CheckBox
е нужно да се използва конструктора:

|
|
import java.awt.*; import
java.applet.Applet;
public class CheckboxSimpleTest2
extends Applet { public void init() {
Checkbox m =
new Checkbox("Label", true); add(m);
} }
|
|
CheckboxGroup
CheckboxGroup се използва
за контрол на поведението на група от
Checkbox обекти (доколко
всеки от тях може да е приел стойност
истина или лъжа). По този начин се
осигурява само един от обектите да
приема стойност истина в даден момент.
Checkbox обектите контролирани
като CheckboxGroup обновено
се наричат "радио бутони". Кодът
по-надолу илюстрира базовата идея на
радио бутоните.

|
|
import java.awt.*; import
java.applet.Applet;
public class CheckboxGroupTest extends
Applet { public void init() {
// създава контрол над бутоните
CheckboxGroup
cbg = new CheckboxGroup();
Checkbox
cb1 = new
Checkbox("Show lowercase only", cbg, true);
Checkbox cb2 =
new
Checkbox("Show uppercase only", cbg, false);
add(cb1);
add(cb2);
} }
|
|
|