codice:
	private class FrameAggiungiNominativo extends JFrame implements ActionListener{
		private JTextField cognome, nome, prefisso, telefono;
		private JButton ok;
		public FrameAggiungiNominativo(){
			setTitle("Aggiunta Nominativo");
			setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
			addWindowListener(new WindowAdapter(){
				public void windowClosing(WindowEvent e){
					if(verificaUscita()){
						agendina.aggiungi(new Nominativo(FinestraGUI.this.cognome.toUpperCase(), FinestraGUI.this.nome.toUpperCase(),
								FinestraGUI.this.prefisso, FinestraGUI.this.telefono));
					}
					cognome.setText("");
					nome.setText("");
					prefisso.setText("");
					telefono.setText("");
					cognomeOk = false;
					nomeOk = false;
					prefissoOk = false;
					telefonoOk = false;
					FrameAggiungiNominativo.this.setVisible(false);
				}
			}// windowClosing
			);
			cognomeOk = false;
			nomeOk = false;
			prefissoOk = false;
			telefonoOk = false;
			JPanel p = new JPanel();
			p.setLayout(new FlowLayout()); // ridondante
			p.add(new JLabel("Cognome", JLabel.RIGHT));
			p.add(cognome = new JTextField("", 12));
			p.add(new JLabel("Nome", JLabel.RIGHT));
			p.add(nome = new JTextField("", 12));
			p.add(new JLabel("Prefisso", JLabel.RIGHT));
			p.add(prefisso = new JTextField("", 12));
			p.add(new JLabel("Telefono", JLabel.RIGHT));
			p.add(telefono = new JTextField("", 12));
			p.add(ok = new JButton("OK"));
			add(p);
			cognome.addActionListener(this);
			nome.addActionListener(this);
			prefisso.addActionListener(this);
			telefono.addActionListener(this);
			ok.addActionListener(this);
			setLocation(250, 340);
			setSize(400, 150);
		}
		public void actionPerformed(ActionEvent e){
			if(e.getSource() == cognome){
				FinestraGUI.this.cognome = cognome.getText();
				FinestraGUI.this.cognomeOk = true;
			}
			if(e.getSource() == nome){
				FinestraGUI.this.nome = nome.getText();
				FinestraGUI.this.nomeOk = true;
			}
			if(e.getSource() == prefisso){
				FinestraGUI.this.prefisso = prefisso.getText();
				FinestraGUI.this.prefissoOk = true;
			}
			if(e.getSource() == telefono){
				FinestraGUI.this.telefono = telefono.getText();
				FinestraGUI.this.telefonoOk = true;
			}else if(e.getSource() == ok){
				if(verificaUscita()){
					agendina.aggiungi(new Nominativo(FinestraGUI.this.cognome.toUpperCase(), FinestraGUI.this.nome.toUpperCase(),
							FinestraGUI.this.prefisso, FinestraGUI.this.telefono));
					this.setVisible(false);
					cognomeOk = false;
					nomeOk = false;
					prefissoOk = false;
					telefonoOk = false;
					cognome.setText("");
					nome.setText("");
					prefisso.setText("");
					telefono.setText("");
				}
			}
		}// actionPerformed
		private boolean verificaUscita(){
			return cognomeOk && nomeOk && prefissoOk && telefonoOk;
		}// verificaUscita
	}// FrameAggiungiNominativo

	private class FrameRimuoviNominativo extends JFrame implements ActionListener{
		private JTextField cognome, nome;
		private JButton ok;
		public FrameRimuoviNominativo(){
			setTitle("Rimozione Nominativo");
			setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
			addWindowListener(new WindowAdapter(){
				public void windowClosing(WindowEvent e){
					if(verificaUscita()){
						agendina.rimuovi(new Nominativo(FinestraGUI.this.cognome.toUpperCase(), FinestraGUI.this.nome.toUpperCase(), "", ""));
					}
					cognomeOk = false;
					nomeOk = false;
					cognome.setText("");
					nome.setText("");
					FrameRimuoviNominativo.this.setVisible(false);
				}// windowClosing
			});
			cognomeOk = false;
			nomeOk = false;
			prefissoOk = false;
			telefonoOk = false;
			JPanel p = new JPanel();
			p.setLayout(new FlowLayout()); // ridondante
			p.add(new JLabel("Cognome", JLabel.RIGHT));
			p.add(cognome = new JTextField("", 12));
			p.add(new JLabel("Nome", JLabel.RIGHT));
			p.add(nome = new JTextField("", 12));
			p.add(ok = new JButton("OK"));
			add(p);
			cognome.addActionListener(this);
			nome.addActionListener(this);
			ok.addActionListener(this);
			setLocation(250, 340);
			setSize(400, 150);
		}
		public void actionPerformed(ActionEvent e){
			if(e.getSource() == cognome){
				FinestraGUI.this.cognome = cognome.getText();
				FinestraGUI.this.cognomeOk = true;
			}
			if(e.getSource() == nome){
				FinestraGUI.this.nome = nome.getText();
				FinestraGUI.this.nomeOk = true;
			}else if(e.getSource() == ok){
				if(verificaUscita()){
					agendina.rimuovi(new Nominativo(FinestraGUI.this.cognome.toUpperCase(), FinestraGUI.this.nome.toUpperCase(), "", ""));
					this.setVisible(false);
					cognome.setText("");
					nome.setText("");
				}
			}
		}// actionPerformed
		private boolean verificaUscita(){
			return cognomeOk && nomeOk;
		}// verificaUscita
	}// FrameRimuoviNominativo

	private class FrameTelefonoDi extends JFrame implements ActionListener{
		private JTextField cognome, nome;
		private JButton ok;
		public FrameTelefonoDi(){
			setTitle("Ricerca telefono di un nominativo");
			setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
			addWindowListener(new WindowAdapter(){
				public void windowClosing(WindowEvent e){
					if(verificaUscita()){
						Nominativo n = agendina.cerca(new Nominativo(FinestraGUI.this.cognome.toUpperCase(), FinestraGUI.this.nome
								.toUpperCase(), "", ""));
						cognome.setText("");
						nome.setText("");
						if(n != null)
							JOptionPane.showMessageDialog(null,
									"Telefono della persona cercata: " + n.getPrefisso() + "-" + n.getTelefono());
						else
							JOptionPane.showMessageDialog(null, "Nominativo inesistente!");
					}
					FrameTelefonoDi.this.setVisible(false);
				}
			});
			cognomeOk = false;
			nomeOk = false;
			JPanel p = new JPanel();
			p.setLayout(new FlowLayout()); // ridondante
			p.add(new JLabel("Cognome", JLabel.RIGHT));
			p.add(cognome = new JTextField("", 12));
			p.add(new JLabel("Nome", JLabel.RIGHT));
			p.add(nome = new JTextField("", 12));
			p.add(ok = new JButton("OK"));
			add(p);
			cognome.addActionListener(this);
			nome.addActionListener(this);
			ok.addActionListener(this);
			setLocation(250, 340);
			setSize(400, 150);
		}
		public void actionPerformed(ActionEvent e){
			if(e.getSource() == cognome){
				FinestraGUI.this.cognome = cognome.getText();
				FinestraGUI.this.cognomeOk = true;
			}
			if(e.getSource() == nome){
				FinestraGUI.this.nome = nome.getText();
				FinestraGUI.this.nomeOk = true;
			}else if(e.getSource() == ok){
				if(verificaUscita()){
					Nominativo n = agendina.cerca(new Nominativo(FinestraGUI.this.cognome.toUpperCase(), FinestraGUI.this.nome
							.toUpperCase(), "", ""));
					this.setVisible(false);
					cognome.setText("");
					nome.setText("");
					if(n != null)
						JOptionPane.showMessageDialog(null, "Telefono della persona cercata: " + n.getPrefisso() + "-" + n.getTelefono());
					else
						JOptionPane.showMessageDialog(null, "Nominativo inesistente!");
				}
			}
		}// actionPerformed
		private boolean verificaUscita(){
			return cognomeOk && nomeOk;
		}// verificaUscita
	}// FrameTelefonoDi

	private class FramePersonaDi extends JFrame implements ActionListener{
		private JTextField prefisso, telefono;
		private JButton ok;
		public FramePersonaDi(){
			setTitle("Ricerca persona di prefisso e telefono");
			setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
			addWindowListener(new WindowAdapter(){
				public void windowClosing(WindowEvent e){
					if(verificaUscita()){
						Nominativo n = agendina.cerca(FinestraGUI.this.prefisso, FinestraGUI.this.telefono);
						prefisso.setText("");
						telefono.setText("");
						if(n != null)
							JOptionPane.showMessageDialog(null, "Persona trovata: " + n.getCognome().toUpperCase() + " "
									+ n.getNome().toUpperCase());
						else
							JOptionPane.showMessageDialog(null, "Nominativo inesistente!");
					}
					FramePersonaDi.this.setVisible(false);
				}
			});
			prefissoOk = false;
			telefonoOk = false;
			JPanel p = new JPanel();
			p.setLayout(new FlowLayout()); // ridondante
			p.add(new JLabel("Prefisso", JLabel.RIGHT));
			p.add(prefisso = new JTextField("", 12));
			p.add(new JLabel("Telefono", JLabel.RIGHT));
			p.add(telefono = new JTextField("", 12));
			p.add(ok = new JButton("OK"));
			add(p);
			prefisso.addActionListener(this);
			telefono.addActionListener(this);
			ok.addActionListener(this);
			setLocation(250, 340);
			setSize(400, 150);
		}
		public void actionPerformed(ActionEvent e){
			if(e.getSource() == prefisso){
				FinestraGUI.this.prefisso = prefisso.getText();
				FinestraGUI.this.prefissoOk = true;
			}
			if(e.getSource() == telefono){
				FinestraGUI.this.telefono = telefono.getText();
				FinestraGUI.this.telefonoOk = true;
			}else if(e.getSource() == ok){
				if(verificaUscita()){
					Nominativo n = agendina.cerca(FinestraGUI.this.prefisso, FinestraGUI.this.telefono);
					this.setVisible(false);
					prefisso.setText("");
					telefono.setText("");
					if(n != null)
						JOptionPane.showMessageDialog(null, "Persona trovata: " + n.getCognome().toUpperCase() + " "
								+ n.getNome().toUpperCase());
					else
						JOptionPane.showMessageDialog(null, "Nominativo inesistente!");
				}
			}
		}// actionPerformed
		private boolean verificaUscita(){
			return prefissoOk && telefonoOk;
		}// verificaUscita
	}// FramePersonaDi

	private class FrameElenco extends JFrame{
		private JTextArea area;
		public FrameElenco(){
			setTitle("Elenco Nominativi");
			setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			JPanel p = new JPanel();
			p.setLayout(new FlowLayout()); // ridondante
			JTextArea area = new JTextArea(10, 25);
			area.setEditable(false);
			JScrollPane sp = new JScrollPane(area);
			p.add(sp);
			add(p);
			if(agendina.size() != 0)
				area.append(agendina.toString());
			else
				area.append("Agendina vuota!");
			setLocation(250, 340);
			setSize(400, 150);
		}
	}// FrameElenco
	private void menuIniziale(){
		apri.setEnabled(false);
		salva.setEnabled(false);
		salvaConNome.setEnabled(false);
		aggiungiNominativo.setEnabled(false);
		rimuoviNominativo.setEnabled(false);
		numeroNominativi.setEnabled(false);
		svuota.setEnabled(false);
		telefonoDi.setEnabled(false);
		personaDi.setEnabled(false);
		elenco.setEnabled(false);
	}// menuIniziale
	private void menuAvviato(){
		tipoAL.setEnabled(false);
		tipoLL.setEnabled(false);
		tipoSet.setEnabled(false);
		tipoMap.setEnabled(false);
		apri.setEnabled(true);
		salva.setEnabled(true);
		salvaConNome.setEnabled(true);
		aggiungiNominativo.setEnabled(true);
		rimuoviNominativo.setEnabled(true);
		numeroNominativi.setEnabled(true);
		svuota.setEnabled(true);
		telefonoDi.setEnabled(true);
		personaDi.setEnabled(true);
		elenco.setEnabled(true);
	}// menuAvviato
	private boolean consensoUscita(){
		int option = JOptionPane.showConfirmDialog(null, "Continuare ?", "Uscendo si perderanno tutti i dati non salvati!", JOptionPane.YES_NO_OPTION);
		return option == JOptionPane.YES_OPTION;
	}// consensoUscita