Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Problema su controllo variabile di tipo boolean

    Ciao ragazzi è qualche giorno che provo ad effettuare un controllo su una variabile di tipo boolean tramite un if e una volta verificata cerco di cambiarne lo stato ma non ne vuol sapere, il problema a mio avviso è che quando chiamo il metodo che verifica lo stato lo faccio creando una nuova istanza della classe, in questo caso new Prova().check(); , avete qualche consiglio da darmi per aggirare questo problema? Avevo pensato di fare implementare la classe MouseListener alla classe Prova ma se possibile vorrei evitare questo metodo. Vi lascio il codice.

    Grazie in anticipo per la vostra disponibilità.

    codice:
    import javax.swing.JButton;
    import javax.swing.JPanel;
    
    public class Prova extends JPanel{
    
    	private JButton prova;
    	
    	private boolean active;
    	
    	public Prova() {
    		
    		active = false;
    		
    		prova = new JButton();
    		
    		prova.setName("prova");
    		prova.addMouseListener(new MouseCacther());
    	}
    	
    	public void check() {
    		
    		if(active) {
    			System.out.println("attivo");
    			active = false;
    		}
    		else {
    			System.out.println("inattivo");
    			active = true;
    		}
    		
    	}
    }

    codice:
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    public class MouseCacther implements MouseListener{
    
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void mouseEntered(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void mouseExited(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void mousePressed(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    		if(e.getComponent().getName() == "prova")
    		{
    			new Prova().check();
    		}
    	}
    
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Problema su controllo variabile di tipo boolean

    Originariamente inviato da alby_mo
    lo stato ma non ne vuol sapere, il problema a mio avviso è che quando chiamo il metodo che verifica lo stato lo faccio creando una nuova istanza della classe
    Appunto .... devi passare al tuo MouseCacther il reference alla istanza della classe Prova.

    1) Definisci in MouseCacther un costruttore che ha un parametro di tipo Prova e assegna il reference ad una variabile di istanza.
    2) Quando in Prova istanzi il MouseCacther passa this (il reference alla istanza di Prova in cui sei) al costruttore.
    3) In mousePressed() usa la variabile di istanza che ho detto in 1)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie mille!!!!! Non ci avevo pensato e sono giorni che ci stavo lavorando....
    Riporto il codice per chi si trovasse in una situazione simile:

    codice:
    import javax.swing.JButton;
    import javax.swing.JPanel;
    
    public class Prova extends JPanel{
    
    	private JButton prova;
    	
    	private boolean active;
    	
    	public Prova() {
    		
    		active = false;
    		
    		prova = new JButton();
    		
    		prova.setName("prova");
    		prova.addMouseListener(new MouseCatcher(this)); //Passo this overo questa classe al costrutore della classe che implementa MouseListener
    	}
    	
    	public void check() {
    		
    		if(active) {
    			System.out.println("attivo");
    			active = false;
    		}
    		else {
    			System.out.println("inattivo");
    			active = true;
    		}
    		
    	}
    }
    codice:
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    
    public class MouseCatcher implements MouseListener{
    
    
           private Prova prova; //Variabile di istanza di tipo Prova
    
            //Costruttore al quale passo il riferimento alla classe chiamante
    	public MouseCatcher(Prova p) {
    	
              prova = p; // Pongo la variabile d'istanza uguale al riferimento
    	}
    
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void mouseEntered(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void mouseExited(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void mousePressed(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    		if(e.getComponent().getName() == "prova")
    		{
    			prova.check(); //utilizzo la variabile d'istanza
    		}
    	}
    
    	@Override
    	public void mouseReleased(MouseEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    }

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.