Con eccezione dei menu ogni componente della GUI (graphical user interface) e implementato con una sottoclasse della classe awt (Abstract Windows Toolkit) Component
- Controlli base = bottoni, checkbox, choice, list, menuItem, textfield
- Altri controlli di input = scrollbar, textarea
- Componenti personalizzati = tramite la classe Canvas
- Linea di testo non editabile = labels
- container = lawt fornisce 2 tipi di containers, entrambi implementati come sottoclasse della classe container (che a sua volta e una sottoclasse della component)
1) Windows = Dialog, FileDialog, frame
2) Panel = i panel sono raggruppabili da un oggetto frame che presenta la finestra in cui sono visualizzati
Altree classi dellawt package:
Dimension = fornisce diverse classi per rappresentare dimensioni e forme
Color = usata per rappresentare e manipolare colori
Image = usata per visualizzare immagini (gif o jpeg)
Graphic = usata per rappresentare un contesto grafico
Event = usata per gestire le azioni del cliente
Ogni componente (eccetto una finestra) per essere visualizzato sullo schermo deve essere prima aggiunto (add) a un oggetto contenitore (container). Questo container e a sua volta un componente e puo essere aggiunto ad un altro container
La classe container definisce 3 metodi per aggiungere componenti
1 - argomento add() - richiede semplicemente di specificare il componente da aggiungere
2 - argomenti add() - come il primo piu un intero che indica la posizione nella lista (-1=ultimo)
3 - argomenti add() - specifica loggetto che deve essere aggiunto anteceduto dalla sua posizione scelta tra: north / south / fast / west / center.
Tutti i componenti ad eccezzione dei menu sono implementati come sottoclassi della classe Component, ed ereditano quindi le seguenti funzionalita:
- Supporto di disegno base: paint() / update() / repaint(), che abilitano i componenti a disegnare se stessi
- Cattura degli eventi in generale tramite handleEvent(), e tramite il gruppo di metodi action()
Font
- Colori: setForeground() / getForeground() / setBackground() / getBackground()
Gestione delle immagini
- Controllo delle dimensioni e posizione: layoutManger / preferredSize(), minimumSize()
Costruttore: | init() | Metodi utili: |
Button b1; | b1 = new Button("testo"); | |
TextField t; | t = new TextFiled("testo"); | |
TextArea t1; | t1 = new TextArea("testo",1,30); | |
Label l; | l = new Label("testo"); | |
Checkbox cb; | cb = new Checkbox("testo"); | setCheckboxGroup |
Choice c; | c = new Choice(); | c.addItem( ); |
List lst; | lst = new list(6, true); | lst.addItem( ); |
Generalmente e consigliabile definire gli oggetti nel costruttore, e inizializzarli ( piu aggiungerli a video) nellinit()
Esempio: |
import java.applet.*; import java.awt.*; public class NomeClasse extends Applet { Button b; public void init() { b = new Button("testoButton"); //b.addActionListener( new BL()); add(b); } } |
Per organizzare i vari componenti java mette a disposizione vari layout.
Ogni Container per default ha un Layout Manger che si occupa di gestire i componenti in un contenitore (window, Panel, Frame, etc)
Per creare un layoutManager e assegnarlo ad un container:
aContainer.setLayout(new CardLayout);
oppure:
public void init() {
setLayout(new FlowLayout());
Metodi disponibili per i contenitori:
add() / remove() / removeAll() / layout() / preferredSize() / minimumSize().
layout() = dice al contenitore di riposizionare se stesso e i componenti che contiene
Esempio BorderLayout: |
//: BLayout.java import java.awt.*; import java.applet.Applet; public class BLayout extends Applet{ public void init() { setLayout(new BorderLayout()); add("North", new Button("Button 1")); add("South", new Button("B2")); add("Center", new Button("Button di esempio")); add("East", new Button("Button3")); add("West", new Button("Button 4")); } } |
Esempio GridLayout: |
//: GLayout.java import java.awt.*; import java.applet.Applet; public class GLayout extends Applet{ public void init() { setLayout(new GridLayout(3,2)); add(new Button("Button 1")); add(new Button("B2")); add(new Button("Button di esempio")); add(new Button("Button3")); add(new Button("Button 4")); } } |
Esempio FlowLayout: |
//: FLayout.java import java.awt.*; import java.applet.Applet; public class FLayout extends Applet{ public void init() { setLayout(new FlowLayout()); add(new Button("Button 1")); add(new Button("B2")); add(new Button("Button di esempio")); add(new Button("Button3")); add(new Button("Button 4")); } } |
Lavorare con la grafica - repaint()
Il sistema di disegno dellawt controlla quando e quanto i programmi possono disegnare.
In risposta al metodo repaint() di un componente, lawt invoca il metodo (del componente) update() per richiedere che il componente ridisegni se stesso. Il metodo update() per default invoca il metodo paint().
Coordinate: sono rappresentate da numeri interi che vanno da (0,0) in alto a sinistra a (width-1,height-1), dove ogni unita rappresenta la dimensione in pixel.
Seguono le 4 forme del metodo repaint():
La classe graphic definisce metodi per disegnare i seguenti tipi di forme
linee: drawLine()
rettangoli: drawRect(), fillRect(), clearRect().
rettangoli 3D: draw3DRect(), fill3DRect()
rettangoli stondati: drawRoundRect(), fillRoundRect()
ellissi: drawOval(), fillOval()
archi: drawArc(), fillArc()
poligoni: drawPoligon(), fillPoligon()
Esempio: |
//: Forme.java import java.awt.*; public class Forme extends Frame { public void paint(Graphics g) { g.drawLine(0,25,40,50); g.drawRect(50,0,50,50); g.drawOval(100,25,100,25); g.fillRect(200,10,50,50); g.fillRoundRect(0,60,50,50,20,20); g.fillOval(100,80,80,50); } public static void main(String args[]) { Forme f = new Forme(); f.setTitle("Forme"); f.resize(250,150); f.show(); } } |