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 n un nuovo Frame inizialmente invisibile 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 n n il contentPane per il Frame. public void setContentPane(Container contentPane) ¨ Imposta il contentPane del Frame. 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 n public la dimensione della finestra 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 n un colore RGB opaco nel range (0 - 255). 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) ¨ n public void add(Component comp, Object constraints) ¨ n Aggiunge un componente (Component di Swing) al pannello e viene posizionato in base al Layout Manager Come il metodo precedente, ma permette di specificare alcuni vincoli di alcuni LayoutManager - overloading 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 ¨ Crea text) una lavel con il testo specificato 15 JLabel – metodi comuni n public void setPreferredSize(Dimension preferredSize) ¨ Imposta n la dimensione preferita di un componente public void setForeground(Color fg) ¨ Imposta n il colore del testo. 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 n il testo visualizzato 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 n public ¨ Crea un pulsante senza testo JButton(String text) un pulsante con il testo specificato 17 JButton – metodi comuni n public void setPreferredSize(Dimension preferredSize) ¨ Imposta n la dimensione preferita di un componente public void setForeground(Color fg) ¨ Imposta n il colore del testo. 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 n il testo visualizzato 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 n public una Test Field vuota JTextField(String text) ¨ Costruisce una Test Field con il testo specificato 20 JTextField – metodi comuni n public void setPreferredSize(Dimension preferredSize) ¨ Imposta n la dimensione preferita di un componente public void setForeground(Color fg) ¨ Imposta n il colore del testo. 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 n il testo visualizzato 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 n la dimensione preferita di un componente public void setForeground(Color fg) ¨ Imposta n il colore del testo. 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 n public Object getSelectedItem() ¨ Ritorna n l’indice selezionato l’elemento selezionato public void setSelectedItem(Object anObject) ¨ Imposta l’elemento specificato come selezionato 24 JCheckBox - javax.swing.JComboBox n Casella selezione Costruttori n public JCheckBox() ¨ Crea n public un check box non selezionato JCheckBox(String text) ¨ Crea un check box non selezionato con il testo specificato 25 JCheckBox – metodi comuni n public void setPreferredSize(Dimension preferredSize) ¨ Imposta n la dimensione preferita di un componente public void setForeground(Color fg) ¨ Imposta n il colore del testo. 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 n public se selezionato 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 n Dispone i componenti uno di seguito all’altro (eventualmente andando alla riga successiva) FlowLayout() ¨ Costruisce n un manager con allineamento al centro 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 n Dispone i componenti a scacchiera (Matrice) public GridLayout() ¨ Crea n public GridLayout(int rows, int cols) ¨ Crea n una griglia su singola colonna una griglia con numero di righe e colonne specificate 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 n public un border layout spaziatura 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. 2. 3. 4. 5. Definire una classe principale che estende JFrame o JPanel Nel costruttore inizializzare componenti grafici e listener Stabilire quali sono gli eventi e a in quali componenti Implementare i listener e registrarli Definire le azioni da eseguire nei metodi dei Listener 42