igurbev.net


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 приложение или аплет:

  1. Композиране на GUI чрез добавяне на компоненти към обект от класа Container.

  2. Задаване на прихващачи на събитията, които да отговарят на активността на потребителя.

  3. Визуализиране на 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);
    }
}

 





коментари




добави коментар
 име: