Esercitazioni JAVA


pagine di Roberto Ricci L.S. "A. Righi", Bologna. Ultima revisione


 
 

Per iniziare


 
  1. Inserire il floppy personale per salvare le esercitazioni nel dirive A:
  2. Aprire il file fond1eo\Es8.htm per leggere e seguire l'esercitazione
  3. Ridurre le dimensioni della finestra che deve restare visibile ma consentire la visibilità di un'altra nuova finestra

 
 

Interfaccia grafica


  La GUI (Graphical User Interface) di un programma è normalmente basata su Le API di Java forniscono classi AWT (Abstract Windowing Toolkit) e Swing (nuova tecnologia di JAVA2) per realizzare interfacce grafiche Gli oggetti grafici Swing derivano tutti dall'oggetto AWT Container, si dispongono in un JPanel secondo uno schema eventualmente definito da un LayoutManager. Tutti i JPanel relaizzati vegono infine inseriti nel JFrame.
 
 

Classi JFrame e JPanel

Come struttura generale è consigliabile
import javax. swing.*;


public class < nome dell'applicazione > extends JFrame {
	< costruttore con richiamo al metodo d'inizializzazione >
	< definizione del metodo per l'inizializzazione dell'interfaccia >
	< di altri metodi >
	< definizioni dei componenti dell'interfaccia >
	< di altri attributi >


	public static void main( String[] args) {
		/* crea ed avvia una nuova applicazione della classe definita */
		new < nome dell'applicazione >();
	}
}
    1. Realizzare e lanciare un'applicazione come la seguente per realizzare un primo semplice esempio di interfaccia grafica
      import javax.swing.JFrame;
      import javax.swing.JLabel;
      import java.awt.Color;
      
      //Applicazione che visualizza una frame sullo schermo
      public class ProvaJFrame extends JFrame {
      
      	//Costruttore che inizializza
      	public ProvaJFrame() {
      		//stabilisce le dimensioni della frame
      		setSize( 300, 200);
      		//assegna un titolo alla frame
      		setTitle(" Una semplice interfaccia grafica");
      		//imposta colore al pannello
      		getContentPane().setBackground(Color.red);
      		//crea un componente etichetta 
      		JLabel testo=new JLabel("questo testo");
      		//imposta il colore del componente
      		testo.setForeground(Color.white);
      		//aggiunge il componente sul pannello
      		getContentPane().add(testo);
      		// visualizza la frame
      		show();
      		// per terminare con la chiusura della frame
      		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      	}
      
      	public static void main( String[] args) {
      		// crea una nuova Frame del tipo ProvaFrame
      		new ProvaJFrame();
      	}
      }
      
    2. Modificare la precedente applicazione in modo da visualizzare la somma dei primi 1000 numeri naturali
    1. Di norma, i componenti non vanno inseriti direttamente nel contenitore principale per l’interfaccia grafica, ma vanno piuttosto inseriti in un pannello, usato come contenitore intermedio; dopo aver inserito tutti i componenti nel contenitore intermedio, il contenitore intermedio va inserito nel contenitore principale.
      import javax.swing.JFrame;
      import javax.swing.JPanel;
      import javax. swing.JLabel;
      import javax. swing.JTextField;
      
      
      // Applicazione che visualizza una frame sullo schermo. 
      public class ProvaJFramePanel extends JFrame{
      
         // Costruttore che lancia l'inizializzazione.
         public ProvaJFramePanel() {
      	//assegna un titolo alla frame
      	setTitle(" Una semplice interfaccia grafica");
      	// inizializza l'interfaccia dell'applicazione 
      	inizializzaGUI();
      	// dimensiona e visualizza la frame
      	pack();
      	show();
      	// per terminare con la chiusura della frame
      	setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
         }
      
        // Inizializza l'interfaccia dell'applicazione.
        private void inizializzaGUI() {
      	// crea pannello, usato come contenitore intermedio
      	JPanel mioPannello= new JPanel();
      	// crea i componenti dell'interfaccia 
      	etichetta = new JLabel(" Scrivi il tuo nome");
      	// crea una riga di testo lunga 30 caratteri 
      	rigaTesto = new JTextField( 30);
      	// aggiunge i componenti al pannello 
      	mioPannello.add(etichetta);
      	mioPannello.add(rigaTesto);	
      	// aggiunge il pannello alla frame
      	this.getContentPane().add(mioPannello);
         }
      
         //gli attributi:
         private JLabel etichetta; // un oggetto etichetta
         private JTextField rigaTesto; // un oggetto riga di testo
      
         public static void main( String[] args) {
      		// crea una nuova Frame del tipo descritto
      		new ProvaJFramePanel();
         }
      }
      
    2. Modificare la precedente applicazione in modo da visualizzare nella riga di testo, preceduta da un'etichetta opportuna, una sequenza di cinque numeri a caso tra 1 e 90

 
 

Gestione di eventi


  L'interazione tra l'utente e un'interfaccia grafica costituisce un 'evento' che deve essere previsto e gestito dall'applicazione.
Componenti sui quali avviene l'azione, eventi e gestori sono tutti oggetti: Ad esempio l'evento potrebbe essere premere [invio] al termine dell'inserimento di una riga di testo in un JTextField. L'interfaccia ActionListener viene implementata nella classe che gestisce l'evento e un oggetto di questa classe viene associato al componente mediante il metodo addActionListener. Quando accade l'evento, viene invocato il metodo actionPerformed dichiarato nell'interfaccia e definito per quella classe; ad esempio può leggere il contenuto di un JTextField con il metodo getText() o scrivervi con il metodo setText(<stringa>).
  1. La precedente applicazione viene arricchita aggiungendo una semplice possibilità d'interazione: un input da tastiera.
    import javax. swing.JFrame;
    import javax. swing.JPanel;
    import javax. swing.JLabel;
    import javax. swing.JTextField;
    import java.awt.event.*;
    
    
    // Applicazione che visualizza una frame sullo schermo.
    public class ProvaJFrameIO extends JFrame{
    
        // Costruttore
    	public ProvaJFrameIO() {
    	    setTitle(" Una frame semplice");
    	    setSize( 300, 200);
    	    inizializzaGUI();
    	    pack();
    	    show();
    	    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
    	}
    
        // Inizializza l'interfaccia dell'applicazione. 
        private void inizializzaGUI() {
    	   // crea pannello, usato come contenitore intermedio 
    	   JPanel mioPannello= new JPanel();
    	   // crea i componenti dell'interfaccia 
    	   etichetta = new JLabel(" Scrivi il tuo nome :");
    	   rigaInput = new JTextField(30);
    	   // aggiunge al componente 'rigaInput' il gestore 
    	   // dell'evento 'pressione del tasto return'
    	   GestEvento mio= new GestEvento();
    	   rigaInput.addActionListener(mio);
    	   // aggiunge i componenti al pannello 
    	   mioPannello.add(etichetta);
    	   mioPannello.add(rigaInput);	
    	   // aggiunge il pannello alla frame 
    	   getContentPane().add(mioPannello);
        }
        // definisce  la modalità di gestione dell'evento 
        class GestEvento implements ActionListener{
          public void actionPerformed(ActionEvent e){
            	rigaInput.setText(rigaInput.getText()+"...che bel nome! \n");
          }
        }
        
        private JLabel etichetta; // una etichetta
        private JTextField rigaInput; // una riga di testo
    
    
    
    	public static void main( String[] args) {
    		// crea una nuova Frame
    		new ProvaJFrameIO();
    	}
    }
    
  2. Modificare l'applicazione in modo che inverta il nome digitato
  3. Modificare l'applicazione inserendo una JTextArea come area di output distinta dalla riga di input
La realizzazione di una interfaccia grafica richiede normalmente la creazione e il posizionamento di numerosi componenti, cosa non molto agevole. Vengono usati allora degli strumenti 'Visual' di programmazione (GUI editor) dedicati alla realizzazione di interfacce grafiche, disponibili in numerosi IDE. il programmatore può selezionare componenti dalla barra degli strumenti del GUI editor, esaminare e modificare le proprietà dei componenti, scrivere le porzioni di codice relative alla logica applicativa dell’applicazione, mentre il GUI editor genera automaticamente la parte standard del codice dell’interfaccia grafica
 
 

Trasformare una JFrame in una JApplet


 
  1. Avendo seguito lo stile suggerito precedentemente si può facilmente trasformare un'applicazione con interfaccia grafica in un'applet
    import javax. swing.JApplet;
    import javax. swing.JPanel;
    import javax. swing.JLabel;
    import javax. swing.JTextField;
    import java.awt.event.*;
    
    // Applicazione che visualizza una frame sullo schermo. 
    public class ProvaJApplet extends JApplet{
    
        // Costruttore
        public ProvaJApplet() {
                // inizializza l'interfaccia dell'applet 
    	    inizializzaGUI();
        }
    
        // Inizializza l'interfaccia dell'applet.
        private void inizializzaGUI() {
    	   // crea pannello, usato come contenitore intermedio
    	   JPanel mioPannello= new JPanel();
    	   // crea i componenti dell'interfaccia 
    	   etichetta = new JLabel(" Scrivi il tuo nome :");
    	   rigaInput = new JTextField(30);
    	   // aggiunge al componente 'rigaInput' il gestore 
    	   // dell'evento 'pressione del tasto return'
    	   GestEvento mio= new GestEvento();
    	   rigaInput.addActionListener(mio);
    	   // aggiunge i componenti al pannello 
    	   mioPannello.add(etichetta);
    	   mioPannello.add(rigaInput);	
    	   // aggiunge il pannello alla frame 
    	   getContentPane().add(mioPannello);
        }
        // definisce  la modalità di gestione dell'evento  
        class GestEvento implements ActionListener{
          public void actionPerformed(ActionEvent e){
            	rigaInput.setText(rigaInput.getText()+"...che bel nome! \n");
          }
        }
        
        private JLabel etichetta; // una etichetta
        private JTextField rigaInput; // una riga di testo
    
        public static void main( String[] args) {
    		// crea una nuova Frame
    		new ProvaJApplet();
        }
    }
    
  2. realizzare un'applet che letti una serie di numeri in una riga di input calcoli media e scarto quadratico medio e lo visualizzi in un'altra riga di testo.
NOTA: Al termine di ogni sessione di lavoro fare una copia del floppy e poi spegnere il computer con Start/Chiudi sessione/Arresta il sistema.
pagine di Roberto Ricci L.S. "A. Righi", Bologna. Ultima revisione