Java GUI Swing Java 1
Introduzione n Componenti grafici di Java (Swing) Utilizzo di alcuni dei metodi per creare semplici finestre grafiche Accesso ai JavaDoc per usare meglio gli oggetti già pronti n Richiami Variabili locali, di istanza e parametri Costruttori Overloading dei metodi e dei costruttori metodo main 2
Java Swing JTextField JLabel JCheckBox JButton JFram e JComboBox ContentPane 3
I Lego n JFrame à getcontentpane() Al Content Pane è un Panel a cui si possono aggiungere (con il metodo add) n JPanel n JButton, JTextField, JCheckBox, JLabel, JCombox n altri componenti Swing n JPanel Metodo add per aggiungere componenti n JPanel n JButton, JTextField, JCheckBox, JLabel, JCombo n altri componenti Swing 4
JFrame - javax.swing.jframe n JFrame: una finestra dotata di cornice, barra del titolo con pulsanti tipici e un pannello (content pane) Content Pane È il pannello contenuto nel JFrame 5
JFrame n Come si aggiungono gli elementi e si imposta il colore? Si applicano al Content Pane! n Content Pane È un Container, in sostanza è un pannello semplice (contiene componenti) In genere si crea un proprio JPanel (o JContainer) e lo si imposta come Content Pane I metodi che si possono applicare sono quali tutti quelli del JPanel 6
JFrame Costruttori n public JFrame() Crea un nuovo Frame inizialmente invisibile n public JFrame(String title) Crea un nuovo frame, inizialmente invisibile, con un testo specificato. Metodi n public void setvisible(boolean b) Mostra o nasconde un Frame in base al valore del parametro b 7
JFrame - metodi n public Container getcontentpane() Ritorna il contentpane per il Frame. n public void setcontentpane(container contentpane) Imposta il contentpane del Frame. n public void setdefaultcloseoperation(int operation) Imposta l operazione che viene eseguita quando si chiude la finestra. JFrame.DO_NOTHING_ON_CLOSE JFrame.HIDE_ON_CLOSE JFrame.DISPOSE_ON_CLOSE JFrame.EXIT_ON_CLOSE. 8
JFrame - metodi n public void setsize(int width, int height) Imposta la dimensione della finestra n public void setlocation(int x, int y) Sposta la finestra nella posizione x,y specificata (relativa all angolo in alto a sinistra della finestra) 9
Color - java.awt.color Costruttori n public Color(int r, int g, int b) Crea un colore RGB opaco nel range (0-255). n public Color(int r, int g, int b, int a) Crea un colore RGB nel range (0-255) con l aggiunta della trasparenza (canale Alpha). n Alcuni colori già pronti, come campi statici di Color Color.BLACK,Color.BLUE,Color.CYAN, Color.DARK_GRAY, Color. GRAY, Color.GREEN, Color.LIGHT_GRAY, Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE, Color.YELLOW 10
JPanel - javax.swing.jpanel n La classe JPanel implementa un contenitore senza cornice che si usa per contenere altri componenti 11
JPanel Costruttore n public JPanel() Crea un panel vuoto con flow layout. Metodi n public void setbackground(color bg) Imposta il colore di sfondo. Il colore è usato solo se il componente è opaco. n public void setopaque(boolean b) Se true lo sfondo del componente (background) viene disegnato 12
JPanel - metodi n public Component add(component comp) Aggiunge un componente (Component di Swing) al pannello e viene posizionato in base al Layout Manager n public void add(component comp, Object constraints) Come il metodo precedente, ma permette di specificare alcuni vincoli di alcuni LayoutManager - overloading n public void setpreferredsize(dimension preferredsize) Imposta la dimensione preferita di un componente à Ad un pannello posso aggiungere anche altri Pannelli n Serve per organizzare meglio lo spazio à Il metodo setsize( ) non funziona in quanto la size è gestita dal LayoutManager (vedremo in seguito) 13
Esempio public static void main(string[] s){ JFrame f=new JFrame();//nuova finestra JPanel p=new JPanel();//nuovo pannello } f.setcontentpane(p);//imposta il content pane p.setbackground(color.green);/*colore dello sfondo (content pane)*/ f.setsize(500,500);/*imposta la dimensione della finestra */ f.setvisible(true);/*visualizza la finestra*/ 14
JLabel - javax.swing.jlabel Bottoni: la classe JLabel implementa un etichetta con sfondo non opaco Costruttori n JLabel() Crea una label vuota. n JLabel(String text) Crea una lavel con il testo specificato 15
JLabel metodi comuni n public void setpreferredsize(dimension preferredsize) Imposta la dimensione preferita di un componente n public void setforeground(color fg) Imposta il colore del testo. n public void setbackground(color bg) Imposta il colore di sfondo. Il colore è usato solo se il componente è opaco. n public void settext(string text) Imposta il testo visualizzato n public void setopaque(boolean isopaque) Se true lo sfondo del componente (background) viene disegnato 16
JButton - javax.swing.jbutton Bottoni: la classe JButton implementa un pulsante Costruttori n public JButton() Crea un pulsante senza testo n public JButton(String text) Crea un pulsante con il testo specificato 17
JButton metodi comuni n public void setpreferredsize(dimension preferredsize) Imposta la dimensione preferita di un componente n public void setforeground(color fg) Imposta il colore del testo. n public void setbackground(color bg) Imposta il colore di sfondo. Il colore è usato solo se il componente è opaco. n public void settext(string text) Imposta il testo visualizzato n public void setopaque(boolean isopaque) Se true lo sfondo del componente (background) viene disegnato 18
Esempio public static void main(string[] s){ /*nuova finestra*/ JFrame f=new JFrame(); /*nuovo pannello */ JPanel p=new JPanel(); /*imposta il content pane*/ f.setcontentpane(p); /*crea un pulsante*/ JButton b=new JButton( pulsante di prova ); /*aggiunge il pulsante al pannello */ p.add(b); /*imposta la dimensione della finestra */ f.setsize(500,500); /*visualizza la finestra*/ f.setvisible(true); } 19
JTextField - javax.swing.jtextfield n Casella di Testo: la classe JTextField implementa un area in cui è possibile inserire del testo Costruttori n public JTextField() Costruisce una Test Field vuota n public JTextField(String text) Costruisce una Test Field con il testo specificato 20
JTextField metodi comuni n public void setpreferredsize(dimension preferredsize) Imposta la dimensione preferita di un componente n public void setforeground(color fg) Imposta il colore del testo. n public void setbackground(color bg) Imposta il colore di sfondo. Il colore è usato solo se il componente è opaco. n public void settext(string text) Imposta il testo visualizzato n public void setopaque(boolean isopaque) Se true lo sfondo del componente (background) viene disegnato 21
JComboBox - javax.swing.jcombobox n Casella selezione Costruttori n JComboBox(Object[] items) Crea una JComboBox che contiene gli elementi specificati nell array. 22
JComboBox metodi comuni n public void setpreferredsize(dimension preferredsize) Imposta la dimensione preferita di un componente n public void setforeground(color fg) Imposta il colore del testo. n public void setbackground(color bg) Imposta il colore di sfondo. Il colore è usato solo se il componente è opaco. n public void setopaque(boolean isopaque) Se true lo sfondo del componente (background) viene disegnato 23
JComboBox Metodi n public int getselectedindex() Ritorna l indice dell elemento selezionato o -1 se non è selezionato nulla n public void setselectedindex(int anindex) Imposta l indice selezionato n public Object getselecteditem() Ritorna l elemento selezionato n public void setselecteditem(object anobject) Imposta l elemento specificato come selezionato 24
JCheckBox - javax.swing.jcombobox n Casella selezione Costruttori n public JCheckBox() Crea un check box non selezionato n public JCheckBox(String text) Crea un check box non selezionato con il testo specificato 25
JCheckBox metodi comuni n public void setpreferredsize(dimension preferredsize) Imposta la dimensione preferita di un componente n public void setforeground(color fg) Imposta il colore del testo. n public void setbackground(color bg) Imposta il colore di sfondo. Il colore è usato solo se il componente è opaco. n public void setopaque(boolean isopaque) Se true lo sfondo del componente (background) viene disegnato 26
JCheckBox Metodi n public boolean isselected() Indica se selezionato n public void setselected(boolean b) Imposta il check su selezionato 27
LayoutManager n Permette di definire il modo in cui i componenti vengono disposti all interno di un pannello FlowLayout GridLayout BorderLayout 28
FlowLayout n Dispone i componenti uno di seguito all altro (eventualmente andando alla riga successiva) n FlowLayout() Costruisce un manager con allineamento al centro n FlowLayout(int align) Costruisce un manager con allineamento specificato dal parametro n FlowLayout(int align, int hgap, int vgap) Costruisce un manager con allineamento specificato dal parametro e spaziatura orizzontale e verticale specificata 29
GridBag n Dispone i componenti a scacchiera (Matrice) n public GridLayout() Crea una griglia su singola colonna n public GridLayout(int rows, int cols) Crea una griglia con numero di righe e colonne specificate n public GridLayout(int rows, int cols, int hgap, int vgap) Crea una griglia con numero di righe e colonne specificate, con una spaziatura (tra le celle) orizzontale e verticale specificata 30
BorderLayout n Dispone i componenti in 5 aree (Nord, Sud, Est, Ovest e Centro) n public BorderLayout() Costruisce un border layout spaziatura n public BorderLayout(int hgap, int vgap) Costruisce un border layout spaziatura orizzontale e verticale specificata 31
BorderLayout n Per aggiungere elementi occorre specificare in quale area collocarli n Supponendo che xxx sia una variabile associata ad un Component (es JButton etc) p.add(xxx,borderlayout.east); p.add(xxx,borderlayout.west); p.add(xxx),borderlayout.north); p.add(xxx,borderlayout.south); p.add(xxx,borderlayout.center); 32
Grafica ed eventi Più movimento alle classi 33
JComponent e Repaint n Come chiedere il ridisegno di un componente? Ogni componente Swing ha il metodo repaint(): l invocazione di questo metodo schedula il ridisegno del componente quanto prima ESEMPIO: JPanel p=new JPanel(); p.add( ) p.repaint(); n Il repaint comporta la chiamata a metodo paintcomponent(graphics g) Utile nei quando si usano componenti per le animazioni 34
JFrame n Come strutturare le classi che utilizzano le swing? quando si ha bisogno di un JFrame, creare una classe che estende JFrame e impostare nel costruttore tutte le istruzioni di inizializzazione Tutti i JComponent che devono essere accessibili vengono definiti come campi e inizializzati nel costruttore Esempio public class Myframe extends JFrame{ private JButton b; public Myframe(){ b=new JButton( pulsante ); } public void miometodo(){ b.setforeground(color.red); } } 35
Listener n Vengono invocati a seguito di un determinato evento n Alcuni listener di interesse: ActionListener MouseListener MouseMotionListener MouseWheelListener n I metodi dei listener vengono invocati in maniera automatica dal gestore di eventi Java 36
Listener e accesso alla classe n Permettere al listener di accedere a campi e metodi della classe generale (in genere si estende JFrame ma per le animazioni a volte si usa JComponent) Definire i listener come classi interne della classe ESEMPIO: public class Myframe extends JFrame{ private JButton b; public Myframe(){ b=new JButton( pulsante ); b.addactionlistener(new MioListener()); } private class MioListener implements ActionListener{ public void actionperformed(actionevent e){ b.setbackground(color.green); } } } 37
Listener e Adapter n Adapter Di ogni tipo di listener esiste un Adapter Per ogni *Listener esiste *Adapter ad eccezione di quelli con zero o uno metodi. n ESEMPIO: MouseAdapter n MouseMotionListener à MouseMotionAdapter n MouseWheelListener à MouseWheelAdapter 38
Registrazione dei Listener n Come registrare un listener *Listener: ActionListener,MouseListener, MouseMotionListener n Per aggiungere un *Listener ad un oggetto c c.add*listener(listener); n Esempio: JButton b=new JButton( mio pulsante ); ActionListener l=new b.addactionlistener(l); b.addmousemotionlistener( ) 39
Analisi degli eventi passo passo n Individuare il componente principale Definire una classe che estende JFrame o JPanel Nel costruttore inizializzare i componenti grafici Utilizzare variabili di istanza per i componenti che devono essere acceduti in altri metodi della classe o nei listener n Stabilire quali sono gli eventi che interessano e quindi i tipi di listener utilizzare Implementare l interfaccia del listener o estendere l Adapter come classe interna 40
Analisi degli eventi passo passo n Definire in quali aree vengono generati gli eventi cioè a quali componenti agganciare i listener registrare i listener definiti ai componenti (da fare nel costruttore della classe generale) n Definire le azioni da eseguire nei metodi dei Listener 41
Ricapitolando 1. Definire una classe principale che estende JFrame o JPanel 2. Nel costruttore inizializzare componenti grafici e listener 3. Stabilire quali sono gli eventi e a in quali componenti 4. Implementare i listener e registrarli 5. Definire le azioni da eseguire nei metodi dei Listener 42