Questo è il codice..
Io ho creato il programma in modo che ad ogni bottone premuto si apra una nuova finestra.. Ora però cercare di fare una cosa più carina e fare tutto in un unica finestra.
Il mio problema è che non so come lavorare sul pannello dal momento che premendo su un bottone, non riesco a mettere negli actionPerformed un riferimento a esso;
Prima intendevo dire che, attivando la actionPerformed, sono costretto a crearmi un nuovo pannello ogni volta perché non so come passargli quello vecchio (insomma riesco a "portarmelo dietro")

Sono sicuro che esiste una soluzione (che sicuramente sarà anche una baggianata), ma non la conosco.

Comunque ecco il codice (ho postato tutto, ma penso bastassero le prime 3 o 4 classi per esporre il mio problema)

codice:
public class MainClass {

	public static void main(String[] args) {		
		
		Crea_finestra fin = new Crea_finestra();
		JFrame jf = new JFrame();
		
		int alt=200, lung=400;
		String Titolo= "Menù";
		jf= fin.crea_JF (Titolo, lung, alt);

		String campi[] = {"Inserisci", "Modifica", "Cancella", "Esci"};		

		JPanel p = new JPanel();
		p= fin.crea_JP(jf);
		
		Crea_menu cm= new Crea_menu();
		cm.pannello_menu(p, campi, 4, Titolo);
	}	
}

codice:
public class Crea_finestra {

	/**Crea un frame **/
	public JFrame crea_JF(String Titolo,int lung, int alt) {

		JFrame jf = new JFrame(Titolo);
		jf.setBounds(400, 100, lung, alt);
		jf.setVisible(true);
		return(jf);
	}
	
	/**Crea un pannello **/
	public JPanel crea_JP(JFrame jf) {

		Container cont_jf = jf.getContentPane(); 
		JPanel p = new JPanel();
		cont_jf.add(p);
		jf.setVisible(true);
		return(p);
	}
}

codice:
public class Crea_menu extends JPanel implements ItemListener, ActionListener {

	JButton bottoni[];

	/**Forma il pannello Menù **/
	public void pannello_menu(JPanel p, String campi[], int num_campi, String Titolo) {
		
		p.removeAll();
		bottoni = new JButton[num_campi];
				
		for(int i= 0; i< num_campi; i++) {
			bottoni[i] = new JButton(campi[i]);
			bottoni[i].addActionListener(this);	
			p.add(bottoni[i]);
		}
				
		p.repaint();
		p.validate();
		p.setVisible(true);
		
	}
	
	public void actionPerformed(ActionEvent e) {
		
		if(e.getSource()== bottoni[0]) {
			Scelta_inserisci si= new Scelta_inserisci();
			si.s_inserisci();
		}
		if(e.getSource()== bottoni[1]) {
			System.out.print("Dovrebbe fare la modifica.\n");
//			Modifica_Utente MU= new Modifica_Utente();
//			MU.Modifica();
		}
		if(e.getSource()== bottoni[2]) {
			System.out.print("Dovrebbe fare la cancellazione.\n");
//			Cancella_Utente CU= new Cancella_Utente();
//			CU.Cancella();					
		}
		if(e.getSource()== bottoni[3]) {
			this.setVisible(false);
			System.exit(0);
		}
	}
	
	public void itemStateChanged(ItemEvent arg0) {
	}
}

codice:
public class Scelta_inserisci extends JPanel implements ItemListener, ActionListener {

	JButton[] bottoni;
	int num_b = 15;
	String testo_b[] = {"Accesso", "Assegnata", "Docente", "Laboratorio", "Locale", "Permesso", "Personale", 
		"Postazione_L", "Postazione_V", "Prenotazione", "Risorsa", "Studente", "Tipo", "Utente", "Esci"}; 

	/** Forma il pannello Menù --> Inserisci **/
	public void s_inserisci() {

		Crea_finestra cjf= new Crea_finestra();
		JFrame jf= new JFrame();
		int alt=200, lung=800;

		jf= cjf.crea_JF("Menù --> Inserisci", lung, alt);

		JPanel p = new JPanel();
		p= cjf.crea_JP(jf);
		Container cont_jf = jf.getContentPane(); 
				
		bottoni = new JButton[num_b];
	
		for(int i= 0; i< num_b; i++) {
			bottoni[i] = new JButton(testo_b[i]);
			bottoni[i].addActionListener(this);	
			p.add(bottoni[i]);
		} 
	}
	
	public void actionPerformed (ActionEvent ae) {

		Inserisci Ins= new Inserisci();
		for (int i=0; i<num_b; i++) {
			if(ae.getSource()== bottoni[i]) {
				Ins.pannelli_inserisci(i);	}	
			
		} 
	}

	public void itemStateChanged(ItemEvent ae) {		
	}
}

codice:
public class Inserisci extends JPanel implements ItemListener, ActionListener {

	JLabel lab[];
	JTextField tf[];
	int num_campi;
	JButton fatto, uscita;
	String Risultati[], Titolo;

	/** fornisce le specifiche per ogni tipo di pannello **/
	public void pannelli_inserisci(int valore) {		
		
		switch(valore) {
			case 0: {
				String campi[]= {"Data accesso", "Ora accesso", "Tessera", "Denominazione", "Codice tipo", "Riuscito", "Giorno"}; 
				String Titolo= "Accesso";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 1: {
				String campi[]= {"Mese", "Numero postazione vincolata", "Numero laboratorio", "Denominazione", 
						"Codice studente", "Codice docente"};
				String Titolo= "Assegnata";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 2: {
				String campi[]= {"Codice docente", "Tessera"}; 
				String Titolo= "Docente";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 3: {
				String campi[]= {"Numero laboratorio", "Denominazione", "Codice personale", "Codice docente"}; 

				String Titolo= "Laboratorio";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 4: {
				String campi[]= {"Denominazione", "Via"}; 
				String Titolo= "Locale";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 5: {
				String campi[]= {"Tessera", "Denominazione", "Codice Tipo"}; 
				String Titolo= "Permesso";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 6: {
				String campi[]= {"Codice personale", "Tecnico (T/F)", "Tessera"}; 
				String Titolo= "Personale";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 7: {
				String campi[]= {"Numero postazione","Numero laboratorio", "Denominazione"}; 
				String Titolo= "Postazione_L";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 8: {
				String campi[]= {"Numero postazione","Numero laboratorio", "Denominazione"}; 
				String Titolo= "Postazione_V";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 9: {
				String campi[]= {"Numero postazione", "Denominazione", "Numero laboratorio", "Codice studente",
						"Codice docente","Data inizio","Data fine","Orario inizio","Orario fine", "Giorno"}; 
				String Titolo= "Prenotazione";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 10: {
				String campi[]= {"Descrizione","Numero laboratorio", "Denominazione", "Codice risorsa"}; 
				String Titolo= "Risorsa";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 11: {
				String campi[]= {"Codice studente", "Tessera"}; 
				String Titolo= "Studente";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 12: {
				String campi[]= {"Codice tipo", "Giorno", "Orario inizio", "Orario fine"}; 
				String Titolo= "Tipo";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 13: {
				String campi[]= {"Nome", "Cognome", "Citta", "Tessera"}; 
				String Titolo= "Utente";
				Inserisci pi= new Inserisci();
				pi.crea_pannello_inserisci(campi, campi.length, Titolo);				
			}; break; 

			case 14: System.exit(0); break;
			default: System.out.println("Errore.");break;
		}
	}	
	
/**Crea il pannello**/
	public void crea_pannello_inserisci(String campi[], int num_campi, String Titolo) {
		
		Crea_finestra cjf= new Crea_finestra();
		JFrame jf= new JFrame();
		int lung=700, alt= 200;
		jf= cjf.crea_JF("Menù --> Inserisci --> " + Titolo, lung, alt);

		JPanel p = new JPanel();
		
		p= cjf.crea_JP(jf);
		Container cont_jf = jf.getContentPane(); 
		
		/** lab e tf sono gli array di label o caselle di testo **/
		lab = new JLabel[num_campi];
		tf = new JTextField[num_campi];

		/** 
		*	assegno al label "i" un testo
		*	aggiungo il label al pannello
 		*	faccio la stessa cosa con la casella di testo
		**/
		for(int i= 0; i< num_campi; i++) {
			lab[i] = new JLabel(campi[i]);
			p.add(lab[i]);
			tf[i]= new JTextField("inserire testo..");
			p.add(tf[i]);
		}
		
		fatto= new JButton("Fatto");
		p.add(fatto);	
		uscita= new JButton("Esci");
		p.add(uscita);		
	}
	
	public void actionPerformed (ActionEvent ae) {
		if(ae.getSource()== fatto) {
			for(int i= 0; i< num_campi; i++) {
				Risultati[i]= tf[i].getText();
				tf[i].setText(" ");
			}
			Inserisci con = new Inserisci();
			con.connetti(Risultati);
		}
		if(ae.getSource()== uscita) {
			System.exit(0);
		}
	}

/** Effettua la connessione con il database **/	
	public void connetti(String Risultati[]){

		String sql = "INSERT INTO " + Titolo + " VALUES ('";
		for (int i=0; i< num_campi-1; i++) {
			sql= sql + Risultati[i] + "', '" ;
		}
		sql= sql + Risultati[num_campi-1] + "')'";

		try {
			Class.forName ("org.postgresql.Driver");
			Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/UniversDB", "muser", "pw");
			Statement stmt = conn.createStatement();				
			stmt.executeUpdate(sql);
			stmt.close();
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void itemStateChanged(ItemEvent arg0) {
	}	
}