Oppure

Loading
10/07/10 8:52
a_butta
Ciao a tutti.
In java esiste (credo e spero di si) una qualche funzione che dato in input la stringa del nome del componente, mi restituisca il componente?
Cioè io ho una serie di jButton dall' 1 al 9.
Come faccio a chiamarli all'interno di un ciclo? intendo qualcosa del tipo:
for (i=1;i<=9;i++)
componente('jButton'+i).//IL MIO CODICE

grazie mille
aaa
10/07/10 12:21
paoloricciuti
Si puoi usare la reflection ma lo trovo abbastanza uno spreco di fatica se ho capito ciò che devi fare: tu hai una serie di bottoni inseriti da NetBeans e devi compiere la stessa operazione su questi bottoni. Ti conviene far fare all'editor grafico di NetBeans il meno possibile e inserire i bottoni come un array di JButton! Se poi sbaglio perdonami.
aaa
10/07/10 13:27
a_butta
Postato originariamente da paoloricciuti:

Si puoi usare la reflection ma lo trovo abbastanza uno spreco di fatica se ho capito ciò che devi fare: tu hai una serie di bottoni inseriti da NetBeans e devi compiere la stessa operazione su questi bottoni. Ti conviene far fare all'editor grafico di NetBeans il meno possibile e inserire i bottoni come un array di JButton! Se poi sbaglio perdonami.


anche a me è venuta quest'idea, e mi sembrava molto interessante.
Ma il mio problema era anche: come definisco poi ogni evento per ogni click del bottone array creato da codice?
aaa
10/07/10 13:39
paoloricciuti
Devo crearti una inner class (classe interna alla classe principale) che estenda ActionListener.
Quindi nel costruttore di questa classe ti fai passare l'id del bottone (in modo che puoi gestire, in base all'id quello che dovrà fare il bottone) e dai l'implementazione del metodo actionPerformed(ActionEvent evt).
private class Button implements ActionListener{
    private int id;    

    public Button(int id){
        this.id=id;
    }

    public void actionPerformed(ActionEvent evt){
        if(this.id=0){
            //fai qualcosa
        }
    }
}


Successivamente fai un for dove inizializzi i JButton e gli aggiungi al pannello.
private void initButton(){
    for(int i=0; i<this.arrayButton.length; i++){
        this.arrayButton[i]=new JButton();
        this.arrayButton[i].setBounds();
        this.arrayButton[i].setText();
        this.arrayButton[i].addActionListener(new Button(i));
        this.panel.add(arrayButton[i]);
    }
}

aaa
10/07/10 14:34
a_butta
Postato originariamente da paoloricciuti:

Devo crearti una inner class (classe interna alla classe principale) che estenda ActionListener.
Quindi nel costruttore di questa classe ti fai passare l'id del bottone (in modo che puoi gestire, in base all'id quello che dovrà fare il bottone) e dai l'implementazione del metodo actionPerformed(ActionEvent evt).
private class Button implements ActionListener{
    private int id;    

    public Button(int id){
        this.id=id;
    }

    public void actionPerformed(ActionEvent evt){
        if(this.id=0){
            //fai qualcosa
        }
    }
}


Successivamente fai un for dove inizializzi i JButton e gli aggiungi al pannello.
private void initButton(){
    for(int i=0; i<this.arrayButton.length; i++){
        this.arrayButton[i]=new JButton();
        this.arrayButton[i].setBounds();
        this.arrayButton[i].setText();
        this.arrayButton[i].addActionListener(new Button(i));
        this.panel.add(arrayButton[i]);
    }
}



grazie mille per l'aiuto. Tuttavia non ho ben compreso la prima parte: l'id sta a indicare quale dei 9 bottoni sto utilizzando?
Se si, come glielo passo? Cioè dove devo scrivere il codice relativo all'evento onclick?
aaa
10/07/10 14:39
paoloricciuti
Esattamente l'id sta ad indicare che bottone stai utilizzando, glielo passi qui:
private void initButton(){ 
    for(int i=0; i<this.arrayButton.length; i++){ 
        this.arrayButton[i]=new JButton(); 
        this.arrayButton[i].setBounds(); 
        this.arrayButton[i].setText(); 
        this.arrayButton[i].addActionListener(new Button(i)); 
        this.panel.add(arrayButton[i]); 
    } 
}


Infatti come puoi vedere l'istruzione this.arrayButton[ i].addActionListener(new Button(i)) assegna all'iesimo bottone dell'array un action listener passando come parametro dell'id la variabile i. Il codice lo devi scrivere nella classe button:
private class Button implements ActionListener{ 
    private int id;     

    public Button(int id){ 
        this.id=id; 
    } 

    public void actionPerformed(ActionEvent evt){ 
        if(this.id=0){ 
            //codice per il bottone 0
        } 
        if(this.id=1){ 
            //codice per il bottone 1
        } 
        if(this.id=2){ 
            //codice per il bottone 2
        } 
        ecc ecc
    } 
}


Spero di essere stato più chiaro. Per altri problemi scrivi pure.
Ultima modifica effettuata da paoloricciuti 10/07/10 14:40
aaa
10/07/10 14:53
a_butta
ho capito grazie mille.
Un'altra domanda: invce di operare una serie di if, io potrei utilizzare un codice unico per tutti i bottoni che varia proprio a seconda dell'id?
Cioè se io non metto if, il codice che inserisco vale per TUTTI i bottoni della classe?
aaa