Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110

    Argomento classe da richiamare nell'ActionListener

    Ciao,
    come posso importare l'argomento della classe all'interno dell'actionlistener anch'esso presente nella stessa classe?
    Nello specifico vorrei che il listener ricevesse Utente utente fatto passare come argomento.

    codice:
    public class PannelloDipendente extends JFrame implements ActionListener{
    
    
        public static final int LARGHEZZA = 370;
        public static final int ALTEZZA = 165;
        
        public PannelloDipendente(Utente utente){
        
        setTitle("Pannello Dipendente");
        setSize(LARGHEZZA,ALTEZZA);
        
        JPanel pannello = new JPanel();
        pannello.setLayout(null);
        
        JButton visualizzaMagazzino = new JButton("Visualizza Magazzino");
        visualizzaMagazzino.setBackground(Color.LIGHT_GRAY);
        visualizzaMagazzino.addActionListener(this);
        visualizzaMagazzino.setBounds(30,30, 160,25);
        pannello.add(visualizzaMagazzino);
        
            
        add(pannello);
        this.setVisible(true);
        }
        
        public void actionPerformed(ActionEvent e){
        
    -->        PannelloInventario pInventario = new PannelloInventario(utente);
            
        }
    mi da errore dove c'è --> dicendo che utente non può essere risolto come variabile.

    codice:
    public class PannelloInventario extends JFrame implements ActionListener{
    
    		private final JButton button;
    	    private final JTable table;
    	    private final DefaultTableModel tableModel = new DefaultTableModel();
    
    
    			
    		public PannelloInventario(final Utente utente) throws HeadlessException {
    			setSize(670, 480);
    			this.setVisible(true);
    			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    			table = new JTable(tableModel);
    			table.addMouseListener(new MouseAdapter() {
    				public void mousePressed(MouseEvent me) {
    					JTable table=(JTable)me.getSource();
    					Point p=me.getPoint();
    					int row=table.rowAtPoint(p);
    					if(me.getClickCount() == 2) {
    						System.out.println("Doppio click alla riga "+row);
    						
    						Object id = table.getValueAt(row, 0);
    						System.out.println(id);
    						Acquisto pAcquisto = new Acquisto();
    						pAcquisto.setId((int) id);
    						pAcquisto = AcquistoManager.getInstance().selezionaProdotto(utente, pAcquisto);
    					}
    				}
    			});
    			
    			add(new JScrollPane(table), BorderLayout.CENTER);
    			
    			button = new JButton("Load Data");
    			button.addActionListener(this);
    			add(button, BorderLayout.PAGE_START);
    		}
    		
    		
    		public void actionPerformed(ActionEvent e){
    						
    			new SwingWorker<Void, Void>() {
    	            
    	            protected Void doInBackground() throws Exception {
    	                ReturnValues tavolamagazzino = DbConnection.getInstance().VisualizzaMagazzino();
    	                Vector<Vector<Object>> data= tavolamagazzino.getData();
    	                Vector<String> nomeColonne= tavolamagazzino.getNomeColonne();
    	                tableModel.setDataVector(data, nomeColonne);
    	                return null;
    	            }
    	        }.execute();
    
    
    		}
    }

    Grazie
    Ultima modifica di Sevenis; 07-02-2017 a 17:44

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    come posso importare l'argomento della classe all'interno dell'actionlistener anch'esso presente nella stessa classe?
    Nello specifico vorrei che il listener ricevesse Utente utente fatto passare come argomento.
    Se intendi l'oggetto Utente passato al costruttore

    codice:
        public PannelloDipendente(Utente utente){

    Allora è banale: nel costruttore assegna questo parametro ad una variabile di istanza (private) e a quel punto sarà visibile ANCHE nel actionPerformed (che è un metodo di istanza di PannelloDipendente).
    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    ...cut... forse risolto. Provo!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    No, c'è un qualche errore. In pratica io voglio portarmi Utente utente in modo tale che, quando vado a comprare un prodotto tramite il PannelloAcquisto, i campi dell'utente siano già compilati e recuperati dal login senza dover digitare tutto ogni volta.
    Purtroppo però mi esce questo errore che mi fa pensare che l'istanza di Utente sia vuota.

    Connected database successfully...
    java.lang.NullPointerException
    at settepietro20021377.magazzino.dbinterface.DbConnec tion.selezionaAcquistoProdotto(DbConnection.java:5 10)
    at settepietro20021377.magazzino.businness.AcquistoMa nager.selezionaProdotto(AcquistoManager.java:23)
    at settepietro20021377.magazzino.viewapplicativa.Pann elloInventario$1.mousePressed(PannelloInventario.j ava:50)
    at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessI mpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessI mpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessI mpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Close database successfully...
    LoginListener

    codice:
    public class LoginListener implements ActionListener {
    
    
        PannelloLogin pLogin;
        
        public void actionPerformed(ActionEvent e){
        String email = pLogin.getEmailText();
        String password = pLogin.getPasswordText();
        
        
        boolean utenteEsiste = UtenteManager.getInstance().verificaLogin(email, password);
        
        if(utenteEsiste){
            
            UtenteManager.getInstance().smistaUtente(email);
        }else{
            JOptionPane.showMessageDialog(null, "Utente non riconosciuto");
        }
        
        pLogin.setVisible(false);
        
        }
        
        public LoginListener(PannelloLogin pLogin) {
            this.pLogin = pLogin;
        }
    }


    UtenteManager
    codice:
    public class UtenteManager {
    
    
        private static UtenteManager instance;
        
        //SINGLETON
        public static UtenteManager getInstance()
        {
            if(instance == null)
                instance = new UtenteManager();
            return instance;
        }
        
        public boolean verificaLogin(String email, String password)
        {
            Utente utente=new Utente();
            utente.setEmail(email);
            utente.setPassword(password);
            return utente.login();
        }
        
        public void smistaUtente(String email){
            Utente utente = DbConnection.getInstance().verificaDipendente(email); 
            if(utente.getCategoria().equalsIgnoreCase("Magazziniere")){
                new PannelloMagazziniere();
            } else if (utente.getCategoria().equalsIgnoreCase("Impiegato")){
                new PannelloDipendente(utente);
            } else if (utente.getCategoria().equalsIgnoreCase("Boss")){
                new PannelloCapoProgetto();
            }
        }
        
    }



    DbConnection --> VerificaDipendente()
    codice:
    public Utente verificaDipendente(String email){                String categoria = "";
                
                Utente utente = new Utente();
                
                try {
                
                Class.forName(JDBC_DRIVER);
                
                System.out.println("Connecting to a selected database...");
                con = DriverManager.getConnection(DB_URL);
                
                System.out.println("Connected database successfully...");    
                st = con.createStatement();
                            
                String sql1 = "SELECT * FROM listautenti WHERE email = ?";
                
                PreparedStatement insertStatement1 = con.prepareStatement(sql1);
                insertStatement1.setString(1, email);
                
                rs = insertStatement1.executeQuery();
                
                while(rs.next()) {
                utente.setNome(rs.getString("nome"));
                utente.setCognome(rs.getString("cognome"));
                utente.setEmail(rs.getString("email"));
                utente.setCategoria(rs.getString("categoria"));
                utente.setPassword(rs.getString("password"));
                utente.setSede(rs.getString("sede"));}
                }    catch...
                    }
                return utente;
                
    
           }


    PannelloDipendente
    codice:
    public class PannelloDipendente extends JFrame implements ActionListener{
    
        public static final int LARGHEZZA = 370;
        public static final int ALTEZZA = 165;
        
        private Utente utente;
        
        public PannelloDipendente(Utente utente){
            
            
        setTitle("Pannello Dipendente");
        setSize(LARGHEZZA,ALTEZZA);
        
        JPanel pannello = new JPanel();
        pannello.setLayout(null);
        
        JButton visualizzaMagazzino = new JButton("Visualizza Magazzino");
        visualizzaMagazzino.setBackground(Color.LIGHT_GRAY);
        visualizzaMagazzino.addActionListener(this);
        visualizzaMagazzino.setBounds(30,30, 160,25);
        pannello.add(visualizzaMagazzino);
        
            
        add(pannello);
        this.setVisible(true);
        }
        
        public void actionPerformed(ActionEvent e){
        
            PannelloInventario pInventario = new PannelloInventario(utente);
            
    
        }


    PannelloInventario()
    codice:
    public PannelloInventario(final Utente utente) throws HeadlessException {            setSize(670, 480);
                this.setVisible(true);
                setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                table = new JTable(tableModel);
                table.addMouseListener(new MouseAdapter() {
                    public void mousePressed(MouseEvent me) {
                        JTable table=(JTable)me.getSource();
                        Point p=me.getPoint();
                        int row=table.rowAtPoint(p);
                        if(me.getClickCount() == 2) {
                            System.out.println("Doppio click alla riga "+row);
                            
                            Object id = table.getValueAt(row, 0);
                            System.out.println(id);
                            Acquisto pAcquisto = new Acquisto();
                            pAcquisto.setId((int) id);
    
                            pAcquisto = AcquistoManager.getInstance().selezionaProdotto(utente, pAcquisto);
    
    add(new JScrollPane(table), BorderLayout.CENTER);
                
                button = new JButton("Load Data");
                button.addActionListener(this);
                add(button, BorderLayout.PAGE_START);
            }
            
            
            public void actionPerformed(ActionEvent e){
                            
                new SwingWorker<Void, Void>() {
                    
                    protected Void doInBackground() throws Exception {
                        ReturnValues tavolamagazzino = DbConnection.getInstance().VisualizzaMagazzino();
                        Vector<Vector<Object>> data= tavolamagazzino.getData();
                        Vector<String> nomeColonne= tavolamagazzino.getNomeColonne();
                        tableModel.setDataVector(data, nomeColonne);
                        return null;
                    }
                }.execute();
    
    
            }
    }
    AcquistoManager
    codice:
    private static AcquistoManager instance;	
    	//SINGLETON
    	public static AcquistoManager getInstance()
    	{
    		if(instance == null)
    			instance = new AcquistoManager();
    		return instance;
    	}
    
    
    
    
    	
    	public Acquisto selezionaProdotto(Utente utente, Acquisto p){
    		Acquisto pAcquisto = DbConnection.getInstance().selezionaAcquistoProdotto(utente, p);
    		return pAcquisto;
    	}
    	
    	public void acquistoProdotto(Acquisto pAcquisto){
    		
    		new PannelloAcquisto(pAcquisto);
    						
    		boolean checkprodotto = DbConnection.getInstance().verificaAcquistoProdotto(pAcquisto);
    		if(checkprodotto == true){
    		DbConnection.getInstance().verificaPrezzoAcquisto(pAcquisto);
    		DbConnection.getInstance().compraProdotto(pAcquisto);
    		}
    	}
    
    
    
    
    
    }


    DbConnection -> VerificaAcquistoProdotto()
    codice:
    public boolean verificaAcquistoProdotto(Acquisto pAcquisto){			   
    			boolean check = false;
    		   
    			try {
    			Class.forName(JDBC_DRIVER);
    			
    			System.out.println("Connecting to a selected database...");
    			con = DriverManager.getConnection(DB_URL);
    			
    	        System.out.println("Connected database successfully...");	
    			st = con.createStatement();
    			    		
    			String sql1 = "SELECT * FROM listaprodotti WHERE nomeprodotto = ?";
    			
    			PreparedStatement insertStatement1 = con.prepareStatement(sql1);
    			insertStatement1.setString(1, pAcquisto.getNomeProdotto());
    			
    			rs = insertStatement1.executeQuery();
    						
    				if(rs.next()){
    					if(pAcquisto.getQuantita() <= rs.getInt("disponibilita")){
    						if(pAcquisto.getQuantita() != 0){
    						check = true;}
    					} else throw new ProdottoNonOrdinabileException();
    				...
    		    }
    			
    			return check;
    
    	   }


    DbConnection -> compraProdotto()
    codice:
    public void compraProdotto(Acquisto pAcquisto){		   
    		   try {
    				
    				Class.forName(JDBC_DRIVER);
    				
    				System.out.println("Connecting to a selected database...");
    				con = DriverManager.getConnection(DB_URL);
    				
    		        System.out.println("Connected database successfully...");	
    				st = con.createStatement();
    				String sql = "INSERT INTO listaacquisti(nomeutente, cognome, progetto, nomeprodotto, quantita, prezzo, prezzofinale, sede) VALUES (?,?,?,?,?,?,?,?)";
    								
    				PreparedStatement insertStatement = con.prepareStatement(sql);
    	    		insertStatement.setString(1, pAcquisto.getNomeDipendente());
    	    		insertStatement.setString(2, pAcquisto.getCognomeDipendente());
    	    		insertStatement.setString(3, pAcquisto.getProgetto());
    	    		insertStatement.setString(4, pAcquisto.getNomeProdotto());
    	    		insertStatement.setInt(5, pAcquisto.getQuantita());
    	    		insertStatement.setDouble(6, pAcquisto.getPrezzo());
    	    		insertStatement.setDouble(7, pAcquisto.getPrezzoFinale());
    	    		insertStatement.setString(8,  pAcquisto.getSede());
    	    		insertStatement.execute();
    	    		
    	    		String sql2 = "UPDATE listaprodotti SET disponibilita = disponibilita - ? WHERE nomeprodotto = ?";
    	    		PreparedStatement insertStatement2 = con.prepareStatement(sql2);
    	    		insertStatement2.setInt(1, pAcquisto.getQuantita());
    	    		insertStatement2.setString(2, pAcquisto.getNomeProdotto());
    	    		insertStatement2.execute();
    	    		
    	    		
    			}	catch(...
    		    	}
    
    	   }



    non mi da errore da nessuna parte ma mi pare chiaro che utente non viene portato bene da una classe all'altra. Dove c'è l'inghippo?
    Grazie!

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Sevenis Visualizza il messaggio
    codice:
    public class PannelloDipendente extends JFrame implements ActionListener{
    
        public static final int LARGHEZZA = 370;
        public static final int ALTEZZA = 165;
        
        private Utente utente;
        
        public PannelloDipendente(Utente utente){
            
            
        setTitle("Pannello Dipendente");
        setSize(LARGHEZZA,ALTEZZA);
        
        JPanel pannello = new JPanel();
        pannello.setLayout(null);
        
        JButton visualizzaMagazzino = new JButton("Visualizza Magazzino");
        visualizzaMagazzino.setBackground(Color.LIGHT_GRAY);
        visualizzaMagazzino.addActionListener(this);
        visualizzaMagazzino.setBounds(30,30, 160,25);
        pannello.add(visualizzaMagazzino);
        
            
        add(pannello);
        this.setVisible(true);
        }
        
        public void actionPerformed(ActionEvent e){
        
            PannelloInventario pInventario = new PannelloInventario(utente);
            
    
        }
    Hai messo sì il campo correttamente private Utente utente;

    Ma non l'hai inizializzato con il utente passato al costruttore!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    110
    Perfetto! Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.