2. Differenze tra swing e awt
Le classi di swing sono un’evoluzione di quelle di awt. In particolare sono
stati rivisti tutti i controlli di uso comune, mantenendo lo stesso nome
preceduto da J: JButton, JTextField, JTextArea, JFrame, JPanel, JMenu,
JMenuItem, Jmenu, JMenuBar (sono sottoclassi delle classi awt).
Inoltre sono stati aggiunti numerosi altri componenti, ne citiamo alcuni:
•JTable:si tratta di una tabella in grado di visualizzare dati, immagini…..
•JList: sostituisce la List di awt e si differenzia come comportamento
•JComboBox: sostituisce la Choice di awt
•JRadioButton: sostituisce CheckBox, CheckBoxGroup di awt
•JProgressBar: barra di scorrimento
•JSlider: indicatore a scorrimento
•JToolBar: barra degli strumenti
•JOptionPane: fornisce numerose finestre di dialogo
•JInternalFrame: finestre interne
Per aver una panoramica completa è possibile avviare l’applicazione
SwingSet2 presente nelle demo di java.
Si note inoltre che con swing è possibile impostare un Look&Feel
indipendente dal sistema operativo sottostante.
3. La prima finestra
Per creare una finestra è necessario istanziare un oggetto che sia una
sottoclasse di JFrame. Si noti inoltre l’uso di show() per visualizzare la finestra
e di alcuni metodi per settare le sue caratteristiche.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MiaFinestra extends JFrame
{
public MiaFinestra(String title, int left, int top, int width, int height)
{
setBounds(left,top,width,height);
setTitle(title);
}
public static void main(String args[])
{
MiaFinestra f=new MiaFinestra(“Hello Win”,100,200,300,200);
f.show();
}
}
Si noti che le differenze con awt finora sono minime.
4. Gestione evento di chiusura
Una JFrame si chiude automaticamente cliccando sulla X, tuttavia è
comunque possibile intercettare l’evento windowClosing.
public MiaFinestra(String title, int left, int top, int width, int height)
{ ……
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
}
5. Uso di componenti
La costruzione dell’interfaccia viene nel costruttore:
public class MiaFinestra extends JFrame
{
private JButton pulsante=new JButton(“Premi qui”);
public MiaFinestra(String title, int left, int top, int width, int height)
{
…….
Container c=getContentPane(); //ricava il contenitore di componenti
//cioè l’area interna della Jframe
//escluse la barra del titolo, quella
//dei menu e eventuali toolbar
c.add(pulsante);
}
…..
}
Si noti l’uso del Container che non era previsto in awt.
6. Posizionamento e Layout
Per quanta riguarda i Layout non ci sono particolari differenze riguardo ad awt
se non che il Layout non avviene applicato alla JFrame, ma al Container
public class MiaFinestra extends JFrame
{
private JButton pulsante=new JButton(“Premi qui”);
public MiaFinestra(String title, int left, int top, int width, int height)
{
…….
Container c=getContentPane();
c.setLayout(null); //Layout nullo
c.add(pulsante); //Aggiungiamo il pusante sulla Frame
pulsante.setBounds(100,100,100,50); //posizionato per coordinate
}
…..
}
7. JOptionPane
E’ un componente che permette di visualizzare finestre di dialogo, il suo uso è
molto semplice:
JOptionPane.showMessageDialog(owner,
”File non trovato”);
int risp=JOptionPane.showConfirmDialog(owner,
”Vuoi proseguire”,
“Selezionare una opzione”,
JOptionPane.YES_NO_OPTION);
risp assume i valori delle costanti YES_OPTION,
NO_OPTION, CANCEL_OPTION
8. JScrollPane
In swing le barre di scorrimento non compaiono automaticamente come in awt,
ma è obbligatorio inserire il componente che necessita delle barre in un
JScrollPane:
JTextArea txt=new JTeatArea(20,50);
JScrollPane scr=new JScrollPane(txt); //costruito sulla JTextArea
Tale JScrollPane può essere poi aggiunto come un normale pannello alla
JFrame.
Lo stesso deve essere fatto per JList, JTable e in generale quando servono le
barre di scorrimento.
9. JList e JComboBox
A differenza delle corrispondenti List e Choice di awt che vengono popolate
tramite il metodo addItem, possono essere costruite direttamente partendo da
-Un array di Object
-Un Vector
-Un modello
String elenco={“Uno”,”Due”,”Tre”};
JList lst=new JList(elenco);
lst.setListData(nuovoElenco);
E’ molto interessante l’uso dei modelli che permette di definire classi apposite
che descrivono il contenuto delle liste.
10. JTable
La JTable può essere popolata
-Un array bidimensionale di Object, più un array con i nomi delle colonne
-Un Vector di valori e un Venctor di nomi delle colonne
-Un modello di tabella.
Particolarmente interessante è l’uso del modello di tabella.