Java AWT: Pulsanti, Eventi, Liste, Campi di Testo ed Etichette
Pulsanti
Pulsanti
Gli oggetti operatore pulsante rimangono con il nome: Pulsante.
Esempio: Pulsante pulsante = new Button("Button");
Il pulsante apparirà quando si visualizza nella finestra. Questo pulsante potrà essere utilizzato per identificare l'evento quando accade.
Eventi del pulsante
Gli eventi di uno dei tasti possono essere catturati sovraccaricando il metodo action():
public boolean action(Event evt, Object obj) {
if (evt.target instanceof Button)
System.out.println((String) obj);
else System.out.println("Event No-Button");
}La distinzione tra tutti i pulsanti può essere effettuata utilizzando l'oggetto Event e confrontando gli oggetti con il pulsante della nostra interfaccia:
import java.awt.*;
import java.applet.Applet;
public class Pulsanti extends Applet {
Button b1, b2, b3;
public void init() {
b1 = new Button("B1 Button");
b2 = new Button("B2 Button");
b3 = new Button("Pulsante B3");
this.add(b1);
this.add(b2);
this.add(b3);
}
public boolean action(Event evt, Object obj) {
if (evt.target.equals(b1))
System.out.println("È stato premuto il pulsante B1");
if (evt.target.equals(b2))
System.out.println("È stato premuto il pulsante B2");
if (evt.target.equals(b3))
System.out.println("È stato premuto il pulsante B3");
return true;
}
}Pulsanti di selezione da lista
I pulsanti di selezione in una prima lista (Choice) offrono accesso veloce al primo degli elementi della lista. Per esempio, potrebbe implementare la selezione di colori con un pulsante Choice:
import java.awt.*;
import java.applet.Applet;
public class BotonSeleccion extends Applet {
Choice selector;
public void init() {
selector = new Choice();
selector.addItem("Rosso");
selector.addItem("Verde");
selector.addItem("Blu");
add(selector);
}
public boolean action(Event evt, Object obj) {
if (evt.target instanceof Choice) {
String color = (String) obj;
System.out.println("Hai selezionato il colore " + color);
}
return true;
}
}Il metodo addItem() restituisce l'argomento obj dell'oggetto evento Choice, in modo che il gestore di selezione del pulsante possa trattare il check-in in un evento pulsante generato di tipo Choice.
Pulsanti di composizione
I Checkbox sono utilizzati frequentemente come pulsanti di stato. Le informazioni del tipo prevedono sì o no (vero o falso). Lo stato restituito dall'oggetto evento è un argomento di tipo boolean:
- true se la casella è selezionata
- false in ogni altro caso
Sia lo stato che il nome vengono restituiti come argomento dell'evento, anche se possono essere ottenuti attraverso i metodi getLabel() e getState() dell'oggetto Checkbox.
import java.awt.*;
import java.applet.Applet;
public class BotonComprobacion extends Applet {
Checkbox Fill;
public void init() {
Fill = new Checkbox("Ryno");
add(Fill);
}
public boolean action(Event evt, Object obj) {
if (evt.target instanceof Checkbox)
System.out.println("CheckBox: " + evt.arg.toString());
return true;
}
}Pulsanti di selezione
I pulsanti di controllo possono essere raggruppati in un'interfaccia modulo tramite CheckboxGroup, ovvero un gruppo di pulsanti di opzione (radio) in cui solo un pulsante alla volta può essere attivo.
import java.awt.*;
import java.applet.Applet;
public class BotonRadio extends Applet {
CheckboxGroup Radio;
public void init() {
Radio = new CheckboxGroup();
add(new Checkbox("Primo", Radio, true));
add(new Checkbox("Secondo", Radio, false));
add(new Checkbox("Terzo", Radio, false));
}
}Pulsanti autosufficienti
Si può costruire un tipo di pulsante estendendo la classe Button, con il gestore degli eventi all'interno della stessa classe. Questi pulsanti possono essere aggiunti all'applicazione senza preoccuparsi degli eventi che potrebbero generare.
import java.awt.*;
import java.applet.Applet;
class BotonAceptar extends Button {
public BotonAceptar() {
setLabel("OK");
}
public boolean action(Event evt, Object obj) {
System.out.println("Pulsante OK");
return true;
}
}
public class BotonAuto extends Applet {
BotonAceptar boton;
public void init() {
boton = new BotonAceptar();
add(boton);
}
}Si noti che non è presente alcun metodo action() nella classe Applet BotonAuto: la classe BotonAceptar gestirà i propri eventi. Se nell'applet fossero presenti altri oggetti, si sarebbe potuto utilizzare un metodo action() per il trattamento di questi oggetti.
Etichette
Le etichette (Label) sono una forma di testo statico, che serve a visualizzare informazioni che normalmente rimangono invariate per l'utente.
import java.awt.*;
import java.applet.Applet;
public class Etichetta extends Applet {
public void init() {
Label etiq1 = new Label("Ciao Java");
Label etiq2 = new Label("Un'altra etichetta");
setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
add(etiq1);
add(etiq2);
}
}Liste
Le liste (List) appaiono nell'interfaccia utente per facilitare la selezione di molti elementi. Sono simili alle Choice. Se la lista visibile non mostra tutti gli elementi, viene utilizzata una barra di scorrimento per visualizzare gli elementi nascosti.
import java.awt.*;
import java.applet.Applet;
public class Lista extends Applet {
public void init() {
List l = new List(4, false);
l.addItem("Mercurio");
l.addItem("Venere");
l.addItem("Terra");
add(l);
}
public boolean action(Event evt, Object obj) {
if (evt.target instanceof List)
System.out.println("Voce di lista: " + obj);
return true;
}
}Per accedere agli elementi selezionati si usa getSelectedItem() oppure getSelectedItems(). Per le liste a selezione semplice, il doppio clic sulla selezione innesca un'azione tramite il metodo action(), allo stesso modo del caso delle Choice.
import java.awt.*;
import java.applet.Applet;
public class ListaMult extends Applet {
List lm = new List(6, true);
public void init() {
Button boton = new Button("Accetta");
lm.addItem("Mercurio");
lm.addItem("Venere");
lm.addItem("Terra");
add(lm);
add(boton);
}
public boolean action(Event evt, Object obj) {
if (evt.target instanceof Button) {
if ("Accetta".equals(obj)) {
String[] seleccion = lm.getSelectedItems();
for (int i = 0; i < seleccion.length; i++)
System.out.println(seleccion[i]);
}
}
return true;
}
}Nel caso di liste a selezione multipla, si usa un evento di azione esterno per leggere la lista associata. Nell'esempio, abbiamo inserito un pulsante per generare un evento con il quale l'applet raccoglie gli elementi selezionati nella lista.
Campi di testo
I campi di testo (TextField) possono essere creati come spazi vuoti con una lunghezza determinata, oppure con un testo predefinito e una lunghezza determinata.
import java.awt.*;
import java.applet.Applet;
public class CampoTexto extends Applet {
TextField tf1, tf2, tf3, tf4;
public void init() {
// Campo di testo vuoto
tf1 = new TextField();
// Campo di testo vuoto di 20 colonne
tf2 = new TextField(20);
// Testo predefinito
tf3 = new TextField("Ciao");
// Testo predefinito di 30 colonne
tf4 = new TextField("Ciao", 30);
add(tf1);
add(tf2);
add(tf3);
add(tf4);
}
public boolean action(Event evt, Object obj) {
if (evt.target instanceof TextField) {
if (evt.target.equals(tf1))
System.out.println("Campo di testo 1: " + evt.arg.toString());
if (evt.target.equals(tf2))
System.out.println("Campo di testo 2: " + evt.arg.toString());
if (evt.target.equals(tf3))
System.out.println("Campo di testo 3: " + evt.arg.toString());
if (evt.target.equals(tf4))
System.out.println("Campo di testo 4: " + evt.arg.toString());
}
return true;
}
}Quando l'utente preme Invio in un campo di testo, il TextField genera un evento, che può essere catturato dal metodo action() come gli altri componenti AWT.
Aree di testo
Gli oggetti TextArea servono a contenere più testo rispetto a una sola riga. Il loro aspetto può essere digitabile oppure di sola lettura. Si può impedire la modifica da parte dell'utente con il metodo setEditable(false), nello stesso modo visto per il TextField.
import java.awt.*;
import java.applet.Applet;
public class AreaTexto extends Applet {
TextArea t1, t2;
public void init() {
Button btn = new Button("OK");
t1 = new TextArea();
t2 = new TextArea("Java Tutorial", 5, 40);
t2.setEditable(false);
add(t1);
add(t2);
add(btn);
}
public boolean action(Event evt, Object obj) {
if (evt.target instanceof Button) {
if ("OK".equals(obj)) {
String testo = t1.getText();
System.out.println(testo);
}
}
return true;
}
}Per accedere al testo attuale di un'area di testo si utilizza il metodo getText(). Le aree di testo non generano eventi da sole, poiché non vengono usate per segnalare quando si accede alle informazioni contenute nella TextArea. In questo caso abbiamo utilizzato un pulsante che, quando premuto, genera un evento che permette di recuperare il testo descritto in precedenza nell'applet.