You are on page 1of 6

Esercizi Java

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

Bocchi Cinzia
1
02/04/2010
Esercizi Java

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)


{}
}

Bocchi Cinzia
2
02/04/2010
Esercizi Java

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);

Bocchi Cinzia
3
02/04/2010
Esercizi Java

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()


{

Bocchi Cinzia
4
02/04/2010
Esercizi Java

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;
}

Bocchi Cinzia
5
02/04/2010
Esercizi Java

//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.

Bocchi Cinzia
6
02/04/2010

You might also like