Elementi di Java Swing LSO 2008 AWT e Swing AWT e Swing mettono a disposizione del programmatore una serie di classi e interfacce per la realizzazione di applicazioni grafiche(GUI). AWT: Abstract Windowing Toolkit Definito nel package java.awt; Legato al sistema grafico nativo del sistema operativo; Velocità di esecuzione; SWING Definito nel package javax.swing; Costruito su AWT(Estende AWT), fornisce una GUI più sofisticata rispetto ad AWT; Essendo scritto in puro Java, funziona allo stesso modo su tutte le piattaforme, al contrario delle AWT le quali sono legate al sistema grafico nativo del sistema operativo; Lo svantaggio di questi componenti è la pesantezza, quindi una più lenta esecuzione; Abbiamo il vantaggio di una uniformità di visualizzazione tra diverse piattaforme; Programmazione di interfacce Per realizzare un’interfaccia grafica dobbiamo: 1) Disegnare l’interfaccia, con le varie componenti(Bottoni, campi di testo, slider, ecc...); 2) Definire il comportamento delle azioni eseguite sull’interfaccia(Es. Pressione di un bottone,...); Per mandare in esecuzione la GUI, dobbiamo: 1) Nel main istanzieremo l’interfaccia; 2) L’interfaccia rimane in attesa che qualcuno faccia qualcosa. Ad ogni operazione fatta dall’utente verranno eseguite delle azioni definite(parti di codice); Disegnare l’interfaccia con Swing Swing fornisce una struttura gerarchica a componenti; Un componente può essere un widget, o un contenitore; Un contenitore può contenere widget e altri contenitori; Es di Widget: Jlist Esempio di interfaccia JFrame Struttura JFrame JPanel Jlist Contenitori Seleziona utente: JPanel Invia Messaggio JButton JLabel JList Codice dell’esempio JFrame f = new JFrame(“Frame 1”); JPanel p = new JPanel( ); JButton b = new JButton(“Invia Messaggio”); Creazione delle componenti JLabel l = new JLabel(“Seleziona utente:”); String[] data = {"one", "two", "three", "four"}; JList user = new JList(data); p.add(b); p.add(l); Struttura delle componenti p.add(user); f.getContentPane().add(p); Nota: L’interfaccia viene costruita in maniera “bottom up”. Prima creiamo le componenti e poi le “attacchiamo” Gerarchia dei contenitori Top-level container: Contenitori che non possono essere inseriti in altri contenitori Es. JFrame, JDialog, Japplet Intermediate container: Servono per semplificare la posizione di sottoparti dell’interfaccia Es. JPanel, JSplitPane, JTabbedPane 7 Posizione dei componenti Come posizionare le varie componenti? Si utilizzano dei gestori di layoutManager(layoutManager); Il layout manager si occupa di posizionare(ed eventualmente riposizionare) le vari parti che compongono l’interfaccia; Per ogni contenitore può essere impostato un layoutManager; Layout Manager null FlowLayout none, programmer sets x,y,w,h Left to right, Top to bottom BorderLayout n w c s e CardLayout One at a time GridLayout GridBagLayout JButton Layout complessi Per ottenere layout complessi, si possono usare delle combinazione di layout. Es: BorderLayout CardLayout One at a time c JButton GridLayout Interazione con l’interfaccia Le azioni che l’utente compie sull’interfaccia, generano degli eventi. • • • • • Click o double clicks del mouse; Inserimento di testo in textBox; Chiusura di una finestra; Ridimensionamento di una finestra; .... Bisogna definire “cosa fare” nel momento in cui si verifica un’evento; Eventi jSendButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent evt) { jSendButtonActionPerformed(evt); } }); Riferimenti Esempi su SWING http://java.sun.com/docs/books/tutorial/uiswing/