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

    ActionListener di oggetti variabili

    public void server_messaggio_TAB (String messaggio2) {
    System.out.println("LISTATAVOLI => "+messaggio2);
    StringTokenizer listaTavoli = new StringTokenizer(messaggio2, "ÞØ»");

    int totale = listaTavoli.countTokens();
    System.out.println("COUNT => "+totale);
    JButton tavoli[] = new JButton[totale];
    tablePanel.removeAll();

    for (tav=0; tav<totale; tav++) {
    System.out.println("Ci arrivo qua: "+tav);
    tavoli[tav] = new JButton(listaTavoli.nextToken());
    tavoli[tav].setSize(130, 20);
    tavoli[tav].addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ev) {
    messaggio = "/ADD "+tav;
    setMessaggioInAttesa(true);
    }
    });
    tablePanel.add(tavoli[tav]);
    }
    System.out.println("Ci arrivo qua");
    }

    Questo è il sorgente in esame. Ho dovuto porre la variabile var globale per far in modo che possa essere accettata dalla variabile in grassetto. Mi chiedo è possibile fare in modo che alla stringa "/ADD ", al momento della creazione del bottone, venga aggiunto un numero che va da 0 a "tavola"??? Perchè altrimenti tav assume sempre il valore di tavola-1 che è l'ultimo valore accettato dal ciclo for.

    Spero di essermi espresso bene.
    Ringrazio in anticipo per l'aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    25
    da provare...non so se è quello che volevi

    codice:
    public void server_messaggio_TAB (String messaggio2)
    {
    	System.out.println("LISTATAVOLI => "+messaggio2);
    	StringTokenizer listaTavoli = new StringTokenizer(messaggio2, "ÞØ»");
    	
    	int totale = listaTavoli.countTokens();
    	System.out.println("COUNT => "+totale);
    	JButton tavoli[] = new JButton[totale];
    	tablePanel.removeAll();
    	
    	for (tav=0; tav<totale; tav++)
    	{
    		System.out.println("Ci arrivo qua: "+tav);
    		tavoli[tav] = new JButton(listaTavoli.nextToken());
    		tavoli[tav].setSize(130, 20);
    		
    		tavoli[tav].addActionListener(new MyActionListener(tav));
    		tablePanel.add(tavoli[tav]);
    	}
    	System.out.println("Ci arrivo qua");
    }
    
    /* inner class */
    class MyActionListener implements ActionListener
    {
    	private int tav;
    
    	MyActionListener(int tav){this.tav = tav;}
    
    	public void actionPerformed(ActionEvent ev)
    	{
    		messaggio = "/ADD " + tav;
    		setMessaggioInAttesa(true);
    	}
    }
    http://sqleonardo.altervista.org

  3. #3
    ciao,

    anche io ho, diciamo lo stesso problema.


    Innanzittutto pregherei di rettificare eventuali errori di battitura, perchè non capisco da dove arrivi la stringa "messaggio", forse era messaggio2? oppure era proprio messaggio ed era una variabile della classe che contiene il metodo void server_messaggio_TAB(..) ?

    attendo notizie.

    Le mie soluzioni di solito prevedono:

    1. la dichiarazione final della variabile da entrare nell'actionlistener
    oppure
    2. la dichiarazione della variabile nella classe, mi spiego:

    codice:
    Class principale{
    
     JTextField campo;
    ....
    
    
     public void metodoBello(){
         
         ....
         // per esempio
         campo= new JTextField("ciccio");
         campo.addActionListerner(new ActionListener(){
    
          public void actionPerformed(ActionEvent ev)
    {
             campo.setText(campo.getText()+" altre cose string");
    }
    });
    
    }
    
    }

  4. #4
    La scrittura del codice è avvenuto in modo corretto, mi ero dimenticato di segnalare che la variabile messaggio2 è locale, mentre la variabile messaggio appartiene alla classe.

    X3 era quello che stavo cercando (anche se devo ancora testarlo).
    Grazie mille per le risposte.

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.