Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Ottenere componente dal suo nome (passato da stringa).
Forum - Java - Ottenere componente dal suo nome (passato da stringa).

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 10:52
Sabato, 10/07/2010
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

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 12:25
Sabato, 10/07/2010

PM Quote
Avatar
paoloricciuti (Ex-Member)
Pro


Messaggi: 137
Iscritto: 27/04/2010

Segnala al moderatore
Postato alle 14:21
Sabato, 10/07/2010
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.

PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 15:27
Sabato, 10/07/2010
Testo quotato

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?

PM Quote
Avatar
paoloricciuti (Ex-Member)
Pro


Messaggi: 137
Iscritto: 27/04/2010

Segnala al moderatore
Postato alle 15:39
Sabato, 10/07/2010
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).
Codice sorgente - presumibilmente Java

  1. private class Button implements ActionListener{
  2.     private int id;    
  3.  
  4.     public Button(int id){
  5.         this.id=id;
  6.     }
  7.  
  8.     public void actionPerformed(ActionEvent evt){
  9.         if(this.id=0){
  10.             //fai qualcosa
  11.         }
  12.     }
  13. }



Successivamente fai un for dove inizializzi i JButton e gli aggiungi al pannello.
Codice sorgente - presumibilmente Java

  1. private void initButton(){
  2.     for(int i=0; i<this.arrayButton.length; i++){
  3.         this.arrayButton[i]=new JButton();
  4.         this.arrayButton[i].setBounds();
  5.         this.arrayButton[i].setText();
  6.         this.arrayButton[i].addActionListener(new Button(i));
  7.         this.panel.add(arrayButton[i]);
  8.     }
  9. }



PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 16:34
Sabato, 10/07/2010
Testo quotato

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).
Codice sorgente - presumibilmente Java

  1. private class Button implements ActionListener{
  2.     private int id;    
  3.  
  4.     public Button(int id){
  5.         this.id=id;
  6.     }
  7.  
  8.     public void actionPerformed(ActionEvent evt){
  9.         if(this.id=0){
  10.             //fai qualcosa
  11.         }
  12.     }
  13. }



Successivamente fai un for dove inizializzi i JButton e gli aggiungi al pannello.
Codice sorgente - presumibilmente Java

  1. private void initButton(){
  2.     for(int i=0; i<this.arrayButton.length; i++){
  3.         this.arrayButton[i]=new JButton();
  4.         this.arrayButton[i].setBounds();
  5.         this.arrayButton[i].setText();
  6.         this.arrayButton[i].addActionListener(new Button(i));
  7.         this.panel.add(arrayButton[i]);
  8.     }
  9. }





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?

PM Quote
Avatar
paoloricciuti (Ex-Member)
Pro


Messaggi: 137
Iscritto: 27/04/2010

Segnala al moderatore
Postato alle 16:39
Sabato, 10/07/2010
Esattamente l'id sta ad indicare che bottone stai utilizzando, glielo passi qui:
Codice sorgente - presumibilmente Java

  1. private void initButton(){
  2.     for(int i=0; i<this.arrayButton.length; i++){
  3.         this.arrayButton[i]=new JButton();
  4.         this.arrayButton[i].setBounds();
  5.         this.arrayButton[i].setText();
  6.         this.arrayButton[i].addActionListener(new Button(i));
  7.         this.panel.add(arrayButton[i]);
  8.     }
  9. }



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:
Codice sorgente - presumibilmente Java

  1. private class Button implements ActionListener{
  2.     private int id;    
  3.  
  4.     public Button(int id){
  5.         this.id=id;
  6.     }
  7.  
  8.     public void actionPerformed(ActionEvent evt){
  9.         if(this.id=0){
  10.             //codice per il bottone 0
  11.         }
  12.         if(this.id=1){
  13.             //codice per il bottone 1
  14.         }
  15.         if(this.id=2){
  16.             //codice per il bottone 2
  17.         }
  18.         ecc ecc
  19.     }
  20. }



Spero di essere stato più chiaro. Per altri problemi scrivi pure.

Ultima modifica effettuata da paoloricciuti il 10/07/2010 alle 16:40
PM Quote
Avatar
a_butta (Member)
Expert


Messaggi: 578
Iscritto: 16/03/2010

Segnala al moderatore
Postato alle 16:53
Sabato, 10/07/2010
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?

PM Quote
Avatar
paoloricciuti (Ex-Member)
Pro


Messaggi: 137
Iscritto: 27/04/2010

Segnala al moderatore
Postato alle 17:23
Sabato, 10/07/2010
Certo se devi fare qualcosa di uguale per tutti i bottoni lo puoi fare tranquillamente.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo