Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37

    Cambio Variabile al Click su bottone

    codice:
    public CaricaImmagini(){
        
    
    static boolean i = false ;      <<<<< Qui dichiaro la variabile e la setto su Falsa
    creaico();    <<<<< Qui esegue CREAICO()
        
    }
    
    
    public void creaico(){
      
         ESEGUI OPERAZIONE 1 
          JButton b1 ;
            
          b1 = new JButton(img); 
          b1.setBounds(50,20,60,50);
          b1.setBackground(new Color(0,0,0,0));      
          b1.addActionListener(new Sposta());    <<<<< Quando viene cliccato il seguente bottone dovrebbe eseguire Sposta() nella quale cambio il valore della variabile
          add(b1);   
          
    
        if( i == true){
          ESEGUI OPERAZIONE 2
    
        }
    } 
    
    
    
    public class Sposta implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if (i == true ){ i=false ; creaico(); }  
            if (i == false){ i=true ;  creaico(); }   <<< Ecco qui cambia il valore e riesegue creaico(), ma questa volta dovrebbe entrare nel if, ma stranamente non accade.
        }
    }
    
    
    public static void main(String[] args){
        
                public void run(){ new CaricaImmagini(); }
         
    
    }

    Ciao ragazzi ho un problema, quello che volevo fare era di cambiare il valore di una variabile quando viene cliccato un bottone, ma per qualche oscuro motivo questo non avviene.

    Ovviamete ho semplificato il codice per renderlo più legibile. Ringrazio in anticipo chi mi risponderà.

  2. #2
    E' un errore di compilazione?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37
    Nono, BlueJ me lo compila senza problemi, lo eseguo, però al click sul bottone non accade ciò che dovrebbe accadere.

    Per verificare se si tratta realmente della variabile, l'ho settata sin dall'inizio su true, così facendo viene eseguito senza problemi.

    Quindi credo si tratti dell'action performed

    codice:
    public class Sposta implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if (i == true ){ i=false ; creaico(); }  
            if (i == false){ i=true ;  creaico(); }   <<< Ecco qui cambia il valore e riesegue creaico(), ma questa volta dovrebbe entrare nel if, ma stranamente non accade.
        }
    }
    che non cambia il valore della variabile.

  4. #4
    Può darsi che sbaglio:

    i è un membro della classe, vero?
    Tu dichiari

    static boolean i = false ;

    e lo scope di questa variabile è interno al metodo CaricaImmagini(). Poi ovviamente manterrà il suo valore perché è static, ma secondo me quando dalle altre funzioni accedi alla variabile i ti stai riferendo a una variabile diversa da quella dichiarata in CaricaImmagini, sbaglio?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37
    Vorrei che quella variabile funga da controllo, quindi dovrebbe essere la stessa variabile sia in
    CaricaImmagini()


    che nel

    public class Sposta implements ActionListener
    {
    public void actionPerformed(ActionEvent e)
    {
    if (i == true ){ i=false ; creaico(); }
    if (i == false){ i=true ; creaico(); } <<< Ecco qui cambia il valore e riesegue creaico(), ma questa volta dovrebbe entrare nel if, ma stranamente non accade.
    }
    }

  6. #6
    e allora perché la dichiari in CaricaImmagini()?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37
    Dove la dovrei dichiarare?

    Scusate l'ignoranza ma ho iniziato da poco col Java.

  8. #8
    Puoi incollare tutti i membri della classe?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    37
    Ecco inserisco tutto completo, spero che si capisca qualcosa.

    codice:
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    
    class CaricaImmagini extends JFrame  {
    
            static boolean i = false ;
        
    ImageIcon img = new ImageIcon("icc.jpg"); 
    ImageIcon ver = new ImageIcon("ros.jpg");
    
    public CaricaImmagini(){
        super("Carica Immagine");
        setSize(300, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        creaico();
        add(new Pannello());
        setVisible(true);
        
    }
    
    
    public void creaico(){
      
          JButton b1, b2, b3 ;
            
          b1 = new JButton(img); 
          b1.setBounds(50,20,60,50);
          b1.setBackground(new Color(0,0,0,0));      
          b1.addActionListener(new Sposta());         
          add(b1);
          
          b2 = new JButton(img); 
          b2.setBounds(50,150,60,50);
          b2.setBackground(new Color(0,0,0,0));      
          add(b2);
          
    
        if( i == true){
    
          remove(b1);
          
          ImageIcon lol = new ImageIcon("ver.jpg"); 
          b1 = new JButton(lol); 
          b1.setBounds(50,20,60,50);
          b1.setBackground(new Color(0,0,0,0));    
          b1.addActionListener(new Sposta());        
    
          add(b1);
        }
    } 
    
    
    
    public class Sposta implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if (i == true ){ i=false ; creaico(); }
            if (i == false){ i=true ;  creaico(); }
        }
    }
    
    
    
    
    class Pannello extends JPanel{
    
        public void paint(Graphics g){ 
            g.drawImage(new ImageIcon("ros.jpg").getImage(), 0, 0, null);
            g.drawImage(new ImageIcon("ver.jpg").getImage(), 0, 100, null); 
        }
    
    }
    
    public static void main(String[] args){
    
        try{
            SwingUtilities.invokeLater(new Runnable(){
                public void run(){ new CaricaImmagini(); }
            });
        }catch(Exception e){ }
    }
    }

  10. #10
    Evidentemente hai sbagliato a copiare il primo codice...che a guardarlo portava errori di compilazione...in effetti hai dichiarato "i" fuori dal metodo CaricaImmagini()...


    Il tuo codice è molto impasticciato e poco convenzionale.
    Questo blocco di codice:
    codice:
    b1 = new JButton(img); 
    b1.setBounds(50,20,60,50);
    b1.setBackground(new Color(0,0,0,0));      
    b1.addActionListener(new Sposta());         
    add(b1);
    deve essere eseguito una e una sola volta dentro il tuo programma. Se devi cambiare l'immagine al bottone, usa setIcon().

    Non so qual'è il problema esattamente, ma FORSE è dovuto alo fatto che quando premi il bottone, ne viene creati altri due sopra di questo, e forse viene chiamato di nuovo actionPerformed() che ti setta "i" di nuovo a false. Questi sono errori che sono dovuti a un codice scritto male e spesso non è possibile prevedere a priori come si comporta il programma. Scrivilo meglio e non creare bottoni uno sopra l'altro

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.