Esercizio7 Gui Prenotazioni Soluzione

6

Click here to load reader

description

Un esercizio con soluzione per la realizzazione di GUI

Transcript of Esercizio7 Gui Prenotazioni Soluzione

Page 1: Esercizio7 Gui Prenotazioni Soluzione

Esercizi Java

Bocchi Cinzia 02/04/2010

1

Esercizio 7: Gui - Prenotazioni con Soluzione Obiettivo: Creare una GUI e gestire gli eventi di azione associati ai pulsanti Creare un’applicazione che consenta ad un utente di prenotare il biglietto di sola andata per una data destinazione, utilizzando una GUI apposita. 1. L’utente deve inserire le seguenti informazioni:

− cognome; − nome; − telefono; − città di partenza; − città di destinazione; − data.

2. Dopo l’inserimento dei dati, l’utente può premere il pulsante “Conferma”, per

confermare la prenotazione o il pulsante “Annulla”, per non confermarla. − La pressione sul pulsante “Conferma” ha come effetto la memorizzazione della

prenotazione in un array di oggetti “Prenotazione” e la comunicazione all’utente stesso dell’avvenuta registrazione, mediante visualizzazione di una finestra di dialogo.

− La pressione del pulsante “Annulla” ha come effetto la cancellazione dei dati inseriti dalla GUI e la comunicazione dell’avvenuto annullamento attraverso una finestra di dialogo.

Suggerimenti § Utilizzare la classe FormLayout per impostare il layout della GUI, relativamente ai soli

campi testo e relative etichette. § Creare una classe Prenotazione, con i metodi necessari alla gestione delle

prenotazioni. § Creare una classe FormPrenotazioni per realizzare l’interfaccia. La classe FormLayout (C. S. Horstmann, Progettazione del software e design pattern in Java, Apogeo, 2004, p. 213-215) import java.awt.*; //Dispone i componenti lungo un asse centrale public class FormLayout implements LayoutManager { private int left; private int right; private int height; private static final int GAP= 6; //calcola la dimensione preferita per il contenitore in base ai componenti contenuti public Dimension preferredLayoutSize(Container parent) { //inserisce in un array tutti i componenti di parent

Page 2: Esercizio7 Gui Prenotazioni Soluzione

Esercizi Java

Bocchi Cinzia 02/04/2010

2

Component[] components= parent.getComponents(); left= 0; right= 0; height= 0; for(int i=0; i<components.length; i+=2) { Component cleft= components[i]; Component cright= components[i+1]; Dimension dleft= cleft.getPreferredSize(); Dimension dright= cright.getPreferredSize(); left= Math.max(left,dleft.width); right= Math.max(right,dright.width); height= height + Math.max(dleft.height,dright.height); } return new Dimension(left+GAP+right,height); } //calcola la dimensione minima per il contenitore in base ai componenti contenuti public Dimension minimumLayoutSize(Container parent) { return preferredLayoutSize(parent); } //Dispone i componenti all'interno del contenitore public void layoutContainer(Container parent) { //calcola le dimensioni preferredLayoutSize(parent); Component[] components= parent.getComponents(); Insets insets= parent.getInsets(); int xcenter= insets.left + left; int y= insets.top; for(int i=0;i<components.length;i+=2) { Component cleft= components[i]; Component cright= components[i+1]; Dimension dleft= cleft.getPreferredSize(); Dimension dright= cright.getPreferredSize(); int height= Math.max(dleft.height,dright.height); int xleft= xcenter-dleft.width; int yleft= y+(height-dleft.height)/2; cleft.setBounds(xleft,yleft,dleft.width,dleft.height); int xright= xcenter+GAP; int yright= y+(height-dright.height)/2; cright.setBounds(xright,yright,dright.width,dright.height); y= y+height; } } public void addLayoutComponent(String name, Component comp) {} public void removeLayoutComponent(Component comp) {} }

Page 3: Esercizio7 Gui Prenotazioni Soluzione

Esercizi Java

Bocchi Cinzia 02/04/2010

3

La GUI FormPrenotazioni import javax.swing.*; import java.awt.*; import java.awt.event.*; public class FormPrenotazioni extends JFrame { //costanti di classe public static final int LARGHEZZA= 400; public static final int ALTEZZA= 300; public static final int X= 100; public static final int Y= 50; public static final int LARGHTEXT= 20; private static final int DIM= 10; //variabili di istanza private Container contentPane; private JPanel cpanel; private JPanel spanel; private Prenotazione[] arrayPrenotazioni; private int indice; public FormPrenotazioni() { super("Prenota il tuo biglietto!"); setSize(LARGHEZZA,ALTEZZA); setLocation(X,Y); setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); contentPane= getContentPane(); arrayPrenotazioni= new Prenotazione[DIM]; indice= 0; //PANNELLO CENTRALE cpanel= new JPanel(); cpanel.setLayout(new FormLayout()); JLabel cognLabel= new JLabel("Cognome: "); final JTextField cognText= new JTextField(LARGHTEXT); JLabel nomeLabel= new JLabel("Nome: "); final JTextField nomeText= new JTextField(LARGHTEXT); JLabel telLabel= new JLabel("Telefono: "); final JTextField telText= new JTextField(LARGHTEXT); JLabel cittapLabel= new JLabel("Citta' Partenza: "); final JTextField cittapText= new JTextField(LARGHTEXT); JLabel cittadLabel= new JLabel("Citta' Destinazione: "); final JTextField cittadText= new JTextField(LARGHTEXT); JLabel dataLabel= new JLabel("Data: "); final JTextField dataText= new JTextField(LARGHTEXT); cpanel.add(cognLabel); cpanel.add(cognText); cpanel.add(nomeLabel); cpanel.add(nomeText); cpanel.add(telLabel);

Page 4: Esercizio7 Gui Prenotazioni Soluzione

Esercizi Java

Bocchi Cinzia 02/04/2010

4

cpanel.add(telText); cpanel.add(cittapLabel); cpanel.add(cittapText); cpanel.add(cittadLabel); cpanel.add(cittadText); cpanel.add(dataLabel); cpanel.add(dataText); //PANNELLO SUD spanel= new JPanel(); JButton conferma= new JButton("Conferma"); JButton annulla= new JButton("Annulla"); spanel.add(conferma); spanel.add(annulla); contentPane.add(cpanel,BorderLayout.CENTER); contentPane.add(spanel,BorderLayout.SOUTH); //GESTIONE CLIC SU CONFERMA conferma.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String cognome= cognText.getText(); String nome= nomeText.getText(); String telefono= telText.getText(); String cittap= cittapText.getText(); String cittad= cittadText.getText(); String data= dataText.getText(); Prenotazione pre= new Prenotazione(cognome,nome,telefono,cittap,cittad,data); arrayPrenotazioni[indice]= pre; indice++; JOptionPane.showMessageDialog(null, "La prenotazione e' stata registrata con successo"); stampaPrenotazioni(); } });

//GESTIONE CLIC SU ANNULLA annulla.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cognText.setText(""); nomeText.setText(""); telText.setText(""); cittapText.setText(""); cittadText.setText(""); dataText.setText(""); JOptionPane.showMessageDialog(null, "La prenotazione e' stata annullata"); } }); } public void stampaPrenotazioni() {

Page 5: Esercizio7 Gui Prenotazioni Soluzione

Esercizi Java

Bocchi Cinzia 02/04/2010

5

for(int i=0;i<indice;i++) { Prenotazione p= arrayPrenotazioni[i]; System.out.println(p.toString()); } } public static void main(String[] args) { FormPrenotazioni form= new FormPrenotazioni(); form.setVisible(true); } } Il codice genera la seguente GUI:

La classe Prenotazione public class Prenotazione { //variabili di istanza private String cognome; private String nome; private String telefono; private String cittaP; private String cittaD; private String data; //costruttore public Prenotazione(String cognome, String nome, String telefono, String cittaP, String cittaD, String data) { this.cognome= cognome; this.nome= nome; this.telefono= telefono; this.cittaP= cittaP; this.cittaD= cittaD; this.data= data; }

Page 6: Esercizio7 Gui Prenotazioni Soluzione

Esercizi Java

Bocchi Cinzia 02/04/2010

6

//metodi get public String getCognome() { return cognome; } public String getNome() { return nome; } public String getTelefono() { return telefono; } public String getCittaP() { return cittaP; } public String getCittaD() { return cittaD; } public String getData() { return data; } //metodi set //li fate voi!!!!!!! public String toString() { return "cognome= "+cognome+", nome= "+nome+" ,telefono= "+telefono+", citta' partenza= "+cittaP+", citta' destinazione= "+cittaD+", data= "+data; } } ____________________________________________________________________

Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribuzione-Non commerciale 2.5 Italia. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-nc/2.5/it/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.