Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    26

    [Java] vedere le variabili dall'interno di actionPerformed

    Mi sono letteralmente incartato e ora non sto capendo più nulla, ma sono in ritardo e dovrei risolvere il mio problema al più presto!!! Vi spiego:
    Sono nel metodo actionPerformed e gli devo dire che quando premo il bottone "avanti" deve richiamare la stessa classe che l'ha generato, con dei parametri maggiorati di uno ripetto ai precedenti... scrivo il codice, magari capite meglio:

    public class myFrame implements ActionListener
    {
    .......
    public void actionPerformed(ActionEvent e)
    {
    Object source=e.getSource();

    if (source==avanti)

    { posImm=posImm+1;
    System.out.println(" "+posImm+" "+sizeVector);

    if(posImm<scelta.size())
    {
    myframe cartella=new myFrame(scelta,altreImmagini,posImm);
    cartella.setVisible(true); dispose();

    }




    Non mi vede le variabili posImm e sizeVector che sono interi istanziati nel costruttore di my frame
    E poi sono in dubbio se il richiamare se stesso (in questo caso specifico) può creare problemi....

  2. #2
    Ma le definisci direttamente nel costruttore? Se è così è ovvio che non te le vede. Devi definirle come variabili di classe al di fuori di ogni metodo. Poi nel costruttore le inizializzi.
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    26
    Ma se le dichiaro fuori dal costruttore e poi le inizializzo in esso, me le vede l'actionPerformed con il loro effettivo valore???
    Le variabili gli vengono passate da un'altra classe, per questo mi bastava fare

    public myFrame(int c)
    {
    int intero=c;
    }

    Ora, se chiamo "intero"(mettiamo il caso che l'abbia dichiarato fuori dal costruttore), dall'interno dell'actionPerformed, mi da il valore di c??? A me sembra che restituisce 0!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    PErché non hai capito gran ché del suggerimento di R@ve
    codice:
    class TestClass1 {
        private int visibile;
        public TestClass1 (int v) {
            this.visibile = v;
        }
        public String toString() {
            return ("Valore di \"visibile\": " + this.visibile);
        }
    }
    
    class TestClass2 {
        private int visibile;
        public TestClass2 (int v) {
            int visibile = v;
        }
        public String toString() {
            return ("Valore di \"visibile\": " + this.visibile);
        }
    }
    
    public class TestScope {
        
        public static void main (String[] args) {
            System.out.println(new TestClass1(10));
            System.out.println(new TestClass2(5));
        }
        
    }
    Provare per credere, visibile viene aggiornata al valore e stampata correttamente nella prima classe, mentre lo stesso "non avviene", nel secondo caso, visto che il costruttore crea una copia locale di visibile e la variabile con scope classe non viene toccata.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    26
    Ho risolto uno dei problemi, e per chi avesse avuto i miei stessi dubbi, la soluzione è (come mi avevate giustamente suggerito!!!)dichiarare nella classe e istanziare nel metodo. In questo modo, contrariamente a quello che pensavo io, mi passa le variabili con i valori dell'istanza che gli passo nel costruttore.


    Il codice che ora mi dà problemi è questo:


    public void actionPerformed(ActionEvent e)
    {
    Object source=e.getSource();

    if (source==avanti)

    { posImm=posImm+1;


    if(posImm<sizeVector)
    {
    System.out.println("HO ISTANZIATO UN ALTRO STAGE ");
    MyFrame successivo=new myFrame(Immscelta,altreImmagini,posImm);
    successivo.setVisible(true); dispose();

    }
    else{...}


    Secondo voi perchè??? L'errore che mi restituisce è
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException


    Scusate l'ignoranza, ma sto sclerando e ho dimenticato anche le cose elementari....


    Grazie per l'aiuto precedente!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    26

    help!!!!

    nessun suggerimento???

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    più codice e la riga dove avviene l'errore.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    26

    ecco il codice

    import javax.swing.*;
    import java.awt.*;
    import java.awt.geom.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import java.awt.color.*;
    import java.io.*;
    import java.util.*;// per il Vector
    import java.io.File;

    public class myFrame extends JFrame implements ActionListener

    {

    public myFrame myFramesuccessivo;

    private JRadioButton capisce= new JRadioButton("CAPISCE");
    private JRadioButton dice= new JRadioButton("DICE");
    private JTextField altro = new JTextField (10);
    private ImageIcon icona=new ImageIcon("freccia.gif");
    private JButton avanti= new JButton(icona);
    private JPanel uno= new JPanel();


    private JPanel cinque= new JPanel();
    private JPanel sei= new JPanel();
    private JPanel sette= new JPanel();


    public Vector scelta;
    public Vector altreImmagini;
    public int posImm;
    public int sizeVector;

    public myFrame (Vector f1,Vector cartelle, int check)
    {
    Vector scelta=f1; Vector altreImmagini=cartelle;int posImm=check;
    sizeVector=scelta.size();


    String prima=scelta.elementAt(posImm).toString();

    int index2=((int)(Math.random()*scelta.size()));

    if(index2==posImm) {
    index2=((int)(Math.random()*scelta.size()));
    }
    String seconda=scelta.elementAt(index2).toString();

    int index3=((int)(Math.random()*scelta.size()));

    if(index3==posImm||index3==index2){
    index3=((int)(Math.random()*scelta.size()));
    }
    String terza=scelta.elementAt(index3).toString();





    int misto=((int)(Math.random()*altreImmagini.size()));


    String fuori=((String)(altreImmagini.elementAt(misto).toS tring()));



    JPanel due= new due(prima, seconda, terza,fuori);
    Toolkit myTkit = Toolkit.getDefaultToolkit();
    //int alt = myTkit.getScreenSize();
    setSize(myTkit.getScreenSize());
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

    this.setTitle("Prova");


    this.getContentPane().add(uno,BorderLayout.SOUTH);
    this.getContentPane().add(due,BorderLayout.CENTER) ;
    //this.setLocation(100,20);

    JLabel altro3 = new JLabel("ALTRO:"); sette.add(altro3,null); sette.add(altro,null);
    cinque.setLayout(new GridLayout(1,3)); cinque.add(dice,null);
    cinque.add(sette);
    cinque.add(avanti);

    uno.setLayout(new GridLayout(3,1));
    uno.add(capisce);
    uno.add(cinque);
    uno.add(sei);




    avanti.addActionListener(this);


    }

    public void actionPerformed(ActionEvent e)
    {
    Object source=e.getSource();

    if (source==avanti)

    { posImm=posImm+1;
    System.out.println("HO ISTANZIATO UN ALTRO myFrame "+posImm+" "+sizeVector);

    if(posImm<sizeVector)
    {
    System.out.println("HO ISTANZIATO UN ALTRO myFrame ");
    myFrame myFramesuccessivo=new myFrame(scelta,altreImmagini,posImm);
    myFramesuccessivo.setVisible(true); dispose();

    }


    }






    }









    public static void main (String[] args)
    {



    Object[]array2={"w","e","f","r","f","d"};


    Vector yyy=new Vector();

    Vector yyy2=new Vector();

    for(int l=0;l<array2.length;l++)
    {
    yyy.addElement(array2[l]);
    yyy2.addElement(array2[l]);
    }

    myFrame myFrame1= new myFrame(yyy2,yyy,0);
    myFrame1.show();




    }

    }





    class due extends JPanel
    {
    JLabel otto= new JLabel();
    JLabel nove= new JLabel ();
    JLabel dieci= new JLabel ();
    JLabel undici= new JLabel ();



    public due(String s,String ss,String sss,String g)
    {


    String prima=s;
    String seconda=ss;
    String terza=sss;
    String fuori=g;

    this.setLayout(new GridLayout(2,2));
    otto.setBackground(new Color(100,100,100,100)); otto.setHorizontalAlignment(SwingConstants.CENTER) ;
    nove.setBackground(new Color(200,100,100,100)); nove.setHorizontalAlignment(SwingConstants.CENTER) ;
    dieci.setBackground(new Color(100,200,100,100)); dieci.setHorizontalAlignment(SwingConstants.CENTER );
    undici.setBackground(new Color(100,100,200,100)); undici.setHorizontalAlignment(SwingConstants.CENTE R);





    otto.setIcon(new ImageIcon((String)(prima)));// cartella di interesse
    System.out.println("SONO NEL PANNELLO DUE!!!!!!!!!!!!!");


    nove.setIcon(new ImageIcon((String)(seconda)));


    dieci.setIcon(new ImageIcon((String)(terza)));



    undici.setIcon(new ImageIcon(fuori));



    int caricaLabel= ((int)(Math.random()*4));

    System.out.println(caricaLabel);
    if(caricaLabel==0)
    { add(otto);add(nove);add(dieci);add(undici);}
    else if(caricaLabel>0&&caricaLabel<=1)
    {add(nove);add(undici);add(dieci);add(otto);}
    else if(caricaLabel>1&&caricaLabel<=2)
    {add(dieci);add(nove);add(undici);add(otto);}
    else
    { add(undici);add(dieci);add(nove);add(otto);}





    }





    }




    Ovviamente il codice l'ho un pò modificato per poterlo incollare qui, ma in parti che non influiscono per niente, infatti se compili e esegui mi dà esattamente l'errore della classe originaria, cioè:

    >javac myFrame.java
    >Exit code: 0
    >java myFrame
    SONO NEL PANNELLO DUE!!!!!!!!!!!!!
    0
    HO ISTANZIATO UN ALTRO myFrame 1 6
    HO ISTANZIATO UN ALTRO myFrame
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at myFrame.<init>(myFrame.java:42)
    at myFrame.actionPerformed(myFrame.java:115)
    at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(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.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForHierar chy(Unknown 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)
    >Exit code: 0


  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013

    Re: ecco il codice

    codice:
    public myFrame (Vector f1,Vector cartelle, int check)
    {  
    Vector scelta=f1; Vector altreImmagini=cartelle;int posImm=check;
    sizeVector=scelta.size();
    ci prendi in giro, vero? Guarda un po' il codice che ho quotato... se non togli la dichiarazione di tipo una volta per tutte, creerai solo e sempre copie locali... e il nuovo myFrame istanziato non saprà che roba sono, da cui gli errori. E' la stessa identica cosa del post precedente... elimina quelle porcherie in modo che il codice sia
    codice:
    public myFrame (Vector f1,Vector cartelle, int check) {  
      scelta=f1;
      altreImmagini=cartelle;
      posImm=check;
      sizeVector=scelta.size();
    PS: impara ad usare il tag CODE per postare codice ed impara ad utilizzare la corretta indentazione nella scrittura del codice se vuoi che qualcuno capisca qualcosa.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.