Creazione oggetto on JButton

di il
1 risposte

Creazione oggetto on JButton

Salve a tutti.
Ho realizzato un'interfaccia grafica, tramite swing, con due JTextField (una "Nome" e l'altra "Cognome") ed un JButton ("Genera cliente"): devo fare in modo, adesso, che al click del mouse venga richiamata la classe Cliente per la creazione di un oggetto che abbia come proprietà "nome" il testo digitato nel primo TextField, e come "cognome" il testo del secondo TextField.
Ho provato con la generazione di eventi, ma sono alle prime armi e trovo parecchie difficoltà...qualcuno potrebbe aiutarmi?


Questo è il codice:

public class Cliente {

	String nominativo = new String();
	String telefono = new String();
	
	//Costruttore per l'inizializzazione di un oggetto Cliente
	public Cliente(){
		nominativo = "NUL";
		telefono = "NUL";
	}
	
	// Metodo per l'inserimento del campo Nominativo
	public void setNominativo(String nomCogn){
		nominativo = nomCogn;
	}
	
	// Metodo per l'inseriemnto del campo Telefono
	public void setTelefono(String numTel){
		telefono = numTel;
	}
		
}

import java.util.*;
import java.io.*;

public class Spettacolo{
	// variabili (tipi primitivi)
	int nroPosti = 100;
	int nroMaxAttesa;
	int nroPrenotazioni = 0;
	
	// ArrayList per la memorizzazione di oggetto di tipo Cliente
	ArrayList<Cliente> arrayPrenotazioni = new ArrayList<Cliente>();
	ArrayList<Cliente> arrayAttesa = new ArrayList<Cliente>();
	

	// Costruttore per l'inizializzazione di un oggetto di tipo Spettacolo
	public Spettacolo(int valMaxAttesa){
		nroMaxAttesa = valMaxAttesa;
	}
	

	// Metodo "libero" che restituisce T se vi è ancora disponibilità di posti
	public boolean libero(){
		boolean aux_libero = false; //variabile ausiliaria per l'assegnazione del risultato del metodo
		
		if (!arrayPrenotazioni.isEmpty()){ //verifico se la lista prenotazioni è non vuota
			if (nroPosti-arrayPrenotazioni.size() > 0) //verifico se vi è ancora disponibilità di posti
				aux_libero = true;
		}
		else
			aux_libero = true;
		return(aux_libero); //assegno al metodo un valore di outupt corrispondente al valore della variabile ausiliaria
	}
	
	
	public void prenota(Cliente client){
		boolean aux_prenota;
		
		aux_prenota = this.libero();
		if(aux_prenota){
			arrayPrenotazioni.add(client);
			nroPrenotazioni++;
		}
		else
			if (arrayAttesa.size() < nroMaxAttesa)
				arrayAttesa.add(client);
			else System.out.println("Liste di prenotazione e di attesa piene.");
	}
	
	
	public int trova(Cliente client){
		int aux_trova = -1;
		
		if(arrayPrenotazioni.contains(client)) aux_trova = 0;
		else
			if(arrayAttesa.contains(client)) aux_trova = 1;
		return(aux_trova);
	}
	

	public void disdici(Cliente client){
		if(arrayPrenotazioni.contains(client)){
			if(!arrayAttesa.isEmpty()){
				arrayPrenotazioni.remove(arrayPrenotazioni.indexOf(client));
				arrayPrenotazioni.add(arrayAttesa.get(0));
				arrayAttesa.remove(0);
			}
			else{
				arrayPrenotazioni.remove(arrayPrenotazioni.indexOf(client));
				nroPrenotazioni--;
			}
		}
		else
			if(arrayAttesa.contains(client)) arrayAttesa.remove(arrayAttesa.indexOf(client));
			else System.out.println("Cliente non presente in nessuna lista.");
	}
	
	
	public boolean incompleto(Cliente client){
		boolean aux_incompleto = false;
		
		if((arrayPrenotazioni.contains(client)) && (arrayAttesa.contains(client)))	aux_incompleto = true;
		return(aux_incompleto);
	}

	public void salvaDati() throws IOException{
		FileWriter f = new FileWriter("fileoutput.txt"); 
		PrintWriter uscita = new PrintWriter(f); 
		uscita.println("LISTA DELLE PRENOTAZIONI:");
		if (!arrayPrenotazioni.isEmpty()){
			for(int i=0; i < arrayPrenotazioni.size(); i++){
				uscita.print((i+1)+". ");
				uscita.print(arrayPrenotazioni.get(i).nominativo);
				uscita.print(" ");
				uscita.println(arrayPrenotazioni.get(i).telefono);
			}
		}
		else System.out.println("Vuota.");
		uscita.println("LISTA DI ATTESA:");
		if (!arrayAttesa.isEmpty()){
			for(int i=0; i < arrayAttesa.size(); i++){
				uscita.print((i+1)+". ");
				uscita.print(arrayAttesa.get(i).nominativo);
				uscita.print(" ");
				uscita.println(arrayAttesa.get(i).telefono);
			}
		}
		else System.out.println("Vuota");
	        uscita.close();		
	}
	
}

import java.awt.*;
import javax.swing.*;

public class Index{

	public static void main(String[] args) {
				
		JFrame base = new JFrame("Gestione Spettacolo");
		base.setVisible(true);
		base.setBounds(000,000,490,350);
		base.setResizable(false);
		base.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		JPanel p1 = new JPanel();
		base.add(p1);
		p1.setVisible(true);
		p1.setBounds(0,0,490,350);
		
		JLabel l1 = new JLabel("PRENOTAZIONI");
		p1.add(l1);
		l1.setVisible(true);
		l1.setBounds(10,5,150,10);
		
		JTextField txt1 = new JTextField("Nome");
		p1.add(txt1);
		txt1.setVisible(true);
		txt1.setBounds(10,80,230,35);
		
		JTextField txt2 = new JTextField("Cognome");
		p1.add(txt2);
		txt2.setVisible(true);
		txt2.setBounds(250,80,230,35);

		JTextField txtAttesa = new JTextField("N° max clienti in lista d'attesa");
		p1.add(txtAttesa);
		txtAttesa.setVisible(true);
		txtAttesa.setBounds(10,40,215,30);

		JButton b1 = new JButton("Prenota");
		p1.add(b1);
		b1.setVisible(true);
		b1.setBounds(10,120,150,40);
		
		JButton b2 = new JButton("Trova");
		p1.add(b2);
		b2.setVisible(true);
		b2.setBounds(230,120,90,40);
		
		JButton b3 = new JButton("Disdici");
		p1.add(b3);
		b3.setVisible(true);
		b3.setBounds(330,120,150,40);
		
		JButton b4 = new JButton("Liberi");
		p1.add(b4);
		b4.setVisible(true);
		b4.setBounds(10,170,230,40);
		
		JButton b5 = new JButton("Incompleti");
		p1.add(b5);
		b5.setVisible(true);
		b5.setBounds(250,170,230,40);
		
		JButton b6 = new JButton();
		p1.add(b6);
		b6.setVisible(true);
		b6.setEnabled(false);
		b6.setBounds(170,120,50,40);
		
		JButton b7 = new JButton("Genera");
		p1.add(b7);
		b7.setVisible(true);
		b7.setBounds(225,40,90,30);
		
		JButton b8 = new JButton("SALVA");
		p1.add(b8);
		b8.setVisible(true);
		b8.setBounds(185,225,120,40);		
	}

}

1 Risposte

  • Re: Creazione oggetto on JButton

    Ciao!

    Basta aggiungere la gestione dell'evento al bottone desiderato, il click sul bottone è gestito dall' ActionListener e l'evento scatenato si chiama actionPerformed, all'interno di questo evento poi puoi scrivere il codice per gestirne la funzionalità, prendiamo il tuo bottone "Genera"
          
          JButton b7 = new JButton("Genera");
          p1.add(b7);
          b7.setVisible(true);
          b7.setBounds(225,40,90,30);
    
    va aggiunta la gestione dell'evento click e quindi diventerà così:
    
          JButton b7 = new JButton("Genera");
          p1.add(b7);
          b7.setVisible(true);
          b7.setBounds(225,40,90,30);
          b7.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    Cliente nuovoCliente = new Cliente();
                    nuovoCliente.setNominativo(txt1.getText() + " " + txt2.getText());
                    JOptionPane.showMessageDialog(null, "Nominativo contenuto nella classe Cliente = " + nuovoCliente.nominativo);
                }
            });
    
    Quello che ho scritto nell'evento praticamente istanzia una nuova classe "Cliente" inizializza il campo nominativo e poi restituisce una Message Box con il contenuto della classe.

    i campi txt1 e txt2 inoltre, per come hai scritto il codice, dovrebbero essere dichiarate come final per far si che siano "viste" dall'evento scatenato dal JButton.

    Un mio suggerimento è quello di scrivere meno codice possibile nel "Main" per quationi funzionali/estetiche, ad esempio il codice da te scritto io l'avrei impostato in questa maniera, per una maggiore leggibilità... Ma è del tutto personale eh , tu scrivi il tuo codice come meglio credi
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    public class NewIndex {
    
        //dichiarazione componenti Form
        private JFrame base;
        private JPanel p1;
        private JLabel l1;
        private JTextField txt1;
        private JTextField txt2;
        private JTextField txtAttesa;
        private JButton b1;
        private JButton b2;
        private JButton b3;
        private JButton b4;
        private JButton b5;
        private JButton b6;
        private JButton b7;
        private JButton b8;
        //fine dichiarazione componenti Form
        
        public NewIndex() {
            InizializzaComponenti();
        }
        
        public static void main(String[] args) {
            new NewIndex();
        }
        
        private void InizializzaComponenti(){
            base = new JFrame("Gestione Spettacolo");
            base.setVisible(true);
            base.setBounds(000,000,490,350);
            base.setResizable(false);
            base.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            p1 = new JPanel();
            base.add(p1);
            p1.setVisible(true);
            p1.setBounds(0,0,490,350);
    
            l1 = new JLabel("PRENOTAZIONI");
            p1.add(l1);
            l1.setVisible(true);
            l1.setBounds(10,5,150,10);
    
            txt1 = new JTextField("Nome");
            p1.add(txt1);
            txt1.setVisible(true);
            txt1.setBounds(10,80,230,35);
    
            txt2 = new JTextField("Cognome");
            p1.add(txt2);
            txt2.setVisible(true);
            txt2.setBounds(250,80,230,35);
    
            txtAttesa = new JTextField("N° max clienti in lista d'attesa");
            p1.add(txtAttesa);
            txtAttesa.setVisible(true);
            txtAttesa.setBounds(10,40,215,30);
    
            b1 = new JButton("Prenota");
            p1.add(b1);
            b1.setVisible(true);
            b1.setBounds(10,120,150,40);
    
            b2 = new JButton("Trova");
            p1.add(b2);
            b2.setVisible(true);
            b2.setBounds(230,120,90,40);
    
            b3 = new JButton("Disdici");
            p1.add(b3);
            b3.setVisible(true);
            b3.setBounds(330,120,150,40);
    
            b4 = new JButton("Liberi");
            p1.add(b4);
            b4.setVisible(true);
            b4.setBounds(10,170,230,40);
    
            b5 = new JButton("Incompleti");
            p1.add(b5);
            b5.setVisible(true);
            b5.setBounds(250,170,230,40);
    
            b6 = new JButton();
            p1.add(b6);
            b6.setVisible(true);
            b6.setEnabled(false);
            b6.setBounds(170,120,50,40);
    
            b7 = new JButton("Genera");
            p1.add(b7);
            b7.setVisible(true);
            b7.setBounds(225,40,90,30);
            b7.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    Cliente nuovoCliente = new Cliente();
                    nuovoCliente.setNominativo(txt1.getText() + " " + txt2.getText());
                    JOptionPane.showMessageDialog(null, "Nominativo contenuto nella classe Cliente = " + nuovoCliente.nominativo);
                }
            });
    
            JButton b8 = new JButton("SALVA");
            p1.add(b8);
            b8.setVisible(true);
            b8.setBounds(185,225,120,40);
        }
        
    }
    
    come puoi vedere nel mio esempio i campi txt1 e txt2 non hanno bisogno di essere dichiarate final perchè sono variabili globali alla classe.

    Ah nella classe Cliente mancano i metodi "getter"

    spero di esserti stato d'aiuto.

    Ciao!!!
Devi accedere o registrarti per scrivere nel forum
1 risposte