Java lezione 12
-
Upload
sergio-ronchi -
Category
Software
-
view
53 -
download
0
Transcript of Java lezione 12
Applicazioni GUI: swing
Package javax.swing
Differenze tra swing e awtLe 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.
La prima finestraPer 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.
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);}
});
}
Uso di componentiLa 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.
Posizionamento e LayoutPer quanta riguarda i Layout non ci sono particolari differenze
riguardo ad awt se non che il Layout non avviene applicato alla JFrame, ma al Containerpublic 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 Framepulsante.setBounds(100,100,100,50); //posizionato per
coordinate }
….. }
JOptionPaneE’ 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
JScrollPaneIn 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 JTextAreaTale 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.
JList e JComboBoxA 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.
JTableLa 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.