Sunteți pe pagina 1din 7

Java AWT conine clase care reprezint controalele sistemului de

operare, astfel nct numrul acestor controale s se poat deosebi de


la sistem la sistem. n plus, nu toate sistemele de?in acelea?i controale
de sistem, dar nu exist nici devieri semnificative.
De prob vom folosi un obiect Frame cu FlowLayout:
import java.awt.*;
public class Main {
public static void main(String[] args) {
Frame f = new Frame();
LayoutManager layOut = new FlowLayout();
f.setLayout(layOut);
//controls goes here
f.setSize(300,300);
f.setVisible(true);
}
}
Label
Label este un control care afieaz textul.
Pentru a afi?a un control Label pe pagin, trebui s o iniializm prin
unul din cei trei constructori posibili:
Label()
Label(String text)
Label(String text, int alignment)
Label l = new Label("Hello!");
f.add(l);
Mesajul Hello va aprea n partea central de sus a ferestrei, ceea ce
este o consecin a comportamentului FlowLayout-ului:
Label l = new Label("Hello!",Label.RIGHT);
Alinierea nu va avea niciun efect dac FlowLayout este activ, aadar, n
scopul de a-l testa l putem dezactiva, respectiv comenta:
...
//f.setLayout(layOut);
...
Alinierea poate fi setat ?i ulterior prin metoda setAlignment:
l.setAlignment(Label.LEFT);
Ambele metode au si optiunea get care returneaza valoarea curenta a atributului
. Aceste metode sunt getText si getAlignment
Urmtorul exemplu deseneaz 35 de controale label ntr-o bucl,
aadar la fiecare 0,1 secunde deseneaz cte un label n cadrul
ferestrei:
import java.awt.*;
import java.awt.Frame;
public class Main {
public static void main(String[] args) throws InterruptedException {
Frame f = new Frame();
LayoutManager layOut = new FlowLayout();
f.setLayout(layOut);
f.setSize(300,300);
for(int i=0;i<35;i++)
{
Label l = new Label("Hello " + i + "!");
f.add(l);
Thread.sleep(100);
f.setVisible(true);
}
}
}
ir sau list.
De exemplu:
Frame f = new Frame();
LayoutManager layOut = new FlowLayout();
f.setLayout(layOut);
f.setSize(300, 300);
ArrayList<String> myLabels = new ArrayList();
myLabels.add("Mercedes");
myLabels.add("Audi");
myLabels.add("BMW");
myLabels.add("Volvo");
for (String myLabel : myLabels) {
Label l = new Label(myLabel);
f.add(l);
}
f.setVisible(true);
n codul de mai sus a fost creat o list generic care prime?te membri
de tip String. Lista a fost completat cu patru membri care vor
prezenta anteturile de pe etichetele pe care vrem s le crem.
Metoda setVisible se aplic i controlului Label.
Controlul Label nu are posibilitatea de a aduga asculttori ai
ac?iunilor, deoarece de fapt nu genereaz niciun eveniment de aciune.
Dar acest lucru nu nseamn c nu putem asculta evenimente prin
aceast comand. De exemplu, putem ataa asculttori ai
evenimentelor mouse-ului pe un control Label.
Urmtorul exemplu atribuie MouseClick listener pe un control Label i
n eventhandler schimb textul comenzii:
Label l = new Label("click me");
l.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
((Label)e.getComponent()).setText("clicked");
}
});
f.add(l);

Button
Button este un control prin care efectum o aciune ntr-o aplicaie.
Vizualizarea lui este foarte similar cu controlul Label, dar
funcionalitatea sa este ceva mai complex, deoarece este capabil s
genereze o aciune.
Pentru a crea un buton/o tast, folosim urmtoarea construcie:
Button b = new Button("Click me");
Constructorul accept un parametru n care se gsete textul afi?at pe
tast, sau nu accept niciunul, caz n care pe tast nu va fi niciun text.
Cnd adugm un titlu tastei, acesta se va lrgi dinamic n funcie de
textul introdus i dac dorim s-i ajustm mrimea, o controlm prin
metoda setPreferedSize:
b.setPreferredSize(new Dimension(110, 20));
Pentru a asculta evenimentul de apsare a unei taste, clasa Button are
op?iunea de a i se aduga un ActionListener:
Adugarea urmtorului ActionListener pe clasa Button i va schimba
titlul dup activare:
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((Button)e.getSource()).setLabel("Click performed");
}
});

Checkbox i Radio Button


Checkbox cb = new Checkbox();
Checkbox cb1 = new Checkbox("My check");
Checkbox cb2 = new Checkbox("My check",true);
f.add(cb);
f.add(cb1);
f.add(cb2);
CheckboxGroup myRadioGroup = new CheckboxGroup();
Checkbox cb = new Checkbox("My radio check 1",myRadioGroup,true);
Checkbox cb1 = new Checkbox("My radio check 2",myRadioGroup,false);
Checkbox cb2 = new Checkbox("My radio check 3",myRadioGroup,false);
f.add(cb);
f.add(cb1);
f.add(cb2);

Ascultarea unui control Checkbox se efectueaz prin ItemListener


listener:
Checkbox cb = new Checkbox("My radio check 1",true);
cb.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
System.out.println(((Checkbox)e.getSource()).getState());
}
});
f.add(cb);
Starea comenzii (activat sau dezactivat) se preia prin metoda getState,
dar este setat prin metoda setState.

Choice
Choice myChoice = new Choice();
myChoice.add("Audi");
myChoice.add("BMW");
myChoice.add("Mercedes");
f.add(myChoice);

Pentru a prelua opiunea selectat a meniului drop-down, avem nevoie


de metoda getSelectedItem. Aceast metod va returna textul curent
ales al meniului drop-down. De exemplu, vom activa aceast metod
cu ajutorul unui buton adi?ional n aplicaie. Urmtorul exemplu
afi?eaz textul elementului ales din meniul drop-down n consola de
ieire prin apsarea tastei:
import java.awt.Button;
import java.awt.Choice;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener
public class Main {
public static Choice myChoice;
public static void main(String[] args) {
Frame f = new Frame();
f.setLayout(new FlowLayout());
f.setSize(300,300);
myChoice = new Choice();
myChoice.add("Renault");
myChoice.add("BMW");
myChoice.add("Mercedes");
Button b = new Button("select");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(myChoice.getSelectedItem());
}
});
f.add(b);
f.add(myChoice);
f.setVisible(true);
}
}

Am fi ob?inut acelai rezultat i prin adugarea unui listener n meniul


drop-down fr folosirea unei tastei, ci doar utiliznd ItemListener:
myChoice = new Choice();
myChoice.add("Renault");
myChoice.add("BMW");
myChoice.add("Mercedes");
myChoice.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
System.out.println(e.getItem());
}
Dac implementai acest exemplu (n locul exemplului cu clasa
Button), vei vedea c odat cu pornirea aplicaiei, dei este primul
elementul selectat, aceast aciune nu declaneaz evenimentul
iteamStateChanged. De aceea, cel mai des ntlnit tip de implementare
este cel cu un element suplimentar care nu are nicio valoare:
myChoice = new Choice();
myChoice.add("Choose car:");
myChoice.add("Renault");
myChoice.add("BMW");
myChoice.add("Mercedes");
Selecia se poate efectua i manual prin metoda select. Aceast
metod accept un String pe care vrem s-l selectm sau poziia pe
care se gsete n list (conform indexului de la zero).
De exemplu:
myChoice.select(2);
va plasa selecia pe opiunea a treia din list, respectiv BMW.
Sau
myChoice.select("Mercedes");

Deoarece datele dintr-o list drop-down sunt completate de obicei dintrun


ir sau list, vom copia indexurile din ir n indexurile elementelor
meniului drop-down. n acest mod vom putea identifica un anumit
element. Cel mai bun mod de a rezolva acest lucru este prin folosirea
unei clase separate. n cazul nostru, aceasta va fi clasa Car:
Car.java
public class Car {
public int id;
public String name;
public Car(int id, String name)
{
this.id = id;
this.name = name;
}
}
Main.java
import java.awt.Choice;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
public class Main {
public static Choice myChoice;
public static ArrayList<Car> cars;
public static void main(String[] args) {
Frame f = new Frame();
f.setLayout(new FlowLayout());
f.setSize(300,300);
cars = new ArrayList<Car>();
cars.add(new Car(5,"Audi"));
cars.add(new Car(6,"BMW"));
cars.add(new Car(7,"Mercedes"));
myChoice = new Choice();
for(Car c: cars)
myChoice.add(c.name);
myChoice.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Choice c = (Choice) e.getSource();
Car selectedCar = cars.get(c.getSelectedIndex());
System.out.println(selectedCar.id);
}
});
f.add(myChoice);
f.setVisible(true);
}
}

LIST
Urmtorul exemplu creeaz o list cu trei elemente i prin apsarea
tastei emite denumirile elementelor selectate n consola de ieire:
import java.awt.*;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static List myCars;
public static void main(String[] args) throws InterruptedException {
Frame f = new Frame();
LayoutManager layOut = new FlowLayout();
f.setLayout(layOut);
f.setSize(300,300);
myCars = new List(10, true);
myCars.add("Renault");
myCars.add("BMW");
myCars.add("Mercedes");
Button b = new Button("Show selected");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String[] selectedCars = myCars.getSelectedItems();
for(int i=0;i<selectedCars.length;i++)
System.out.println(selectedCars[i]);
}
});
f.add(myCars);
f.add(b);
f.setVisible(true);
}
}

TextField i TextArea
Ultimul control din lista noastr de componente AWT de baz este
TextField sau TextArea. Aceste dou controale au caracteristici foarte
similare, cu excep?ia faptului c TextArea are op?iunea de a introduce
mai multe linii de text.
Urmtorul cod creeaz ambele comenzi:
TextField tf = new TextField("Hello from TextField");
TextArea ta = new TextArea("Hello from TextArea box", 5, 25);
f.add(tf);
f.add(ta);
Pentru controalele de text cel mai important lucru este cum s
introduc text n ele nsele i cum s-l extrag din ele. Efcetum acest
lucru l facem prin metodele setText i getText:
tf.setText("This is my new text");
tf.getText();
Exist op?iunea de a manipula textul n cadrul controlului. De exemplu,
urmtoarea metod (setEchoChar) transform toate caracterele n
caracterul special dorit, n timp ce coninutul rmne acelai (de
exemplu, dac n cmp scrie hello, va fi afi?at *****, dar valoarea
cmpului va rmne n continuare hello:
tf.setEchoChar('*');
Urmtoarele metode returneaz textul selectat i indexul primului,
respectiv al ultimului caracter al textului selectat:
tf.getSelectedText();
tf.getSelectionStart();
tf.getSelectionEnd();
Exemplul creeaz dou cmpuri de text i o tast. Cnd se apas pe
tast, coninutul selectat al primului cmp de text este copiat n al
doilea cmp de text:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
static TextField tf_source;
static TextField tf_destination;
public static void main(String[] args) throws InterruptedException {
Frame f = new Frame();
f.setLayout(new FlowLayout());
tf_source = new TextField(20);
tf_destination = new TextField(20);
Button b = new Button("copy");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tf_destination.setText(tf_source.getSelectedText());
}
});
f.add(tf_source);
f.add(b);
f.add(tf_destination);
f.setSize(300, 300);
f.setVisible(true);
}
}

S-ar putea să vă placă și