Newsgroup: it.comp.java
Titolo: Array - come rintracciare l'indice di un oggetto dall'interno?

Mi scuso se la domanda può essere banale, ma programmavo in c++ e passando
al java alcune cose mi spiazzano, come questa:
Ho un array di JRadioButtons, e ad ognuno di questi associo un
ActionListener per controllare quando il bottone viene premuto. Ovviamente
il metodo che viene lanciato dal listener ha bisogno di sapere a che
JRadioButton appartiene, ovvero rintracciare l'indice dell'array.
In c++ avrei probabilmente trafficato con gli indirizzi, ma non riesco a
capire come fare in java. Ho cercato in varie faq, ma continua a sfuggirmi.
Qualcuno mi sa spiegare?
Grazie

Questo è il pezzo di codice:
private void initRadioButtons() {
        razzeRadioButton = new
javax.swing.JRadioButton[tabella.NUMERO_RAZZE];
        for (int i=0; i < tabella.NUMERO_RAZZE; i++) {
            razzeRadioButton[i] = new javax.swing.JRadioButton();
            razzeRadioButton[i].setText(tabella.nomi_razza[i]);
            buttonGroup1.add(razzeRadioButton[i]);
            razzeRadioButton[i].addActionListener(new
java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                razzeRadioButtonActionPerformed(evt);
                }
            });
            checkRazzePanel.add(razzeRadioButton[i]);
        }
    }
 private void razzeRadioButtonActionPerformed(java.awt.event.ActionEvent
evt) {
        // handling code: qui mi serve sapere che radioButton è stato
premuto
    }
Abbiate pazienza ma non ne vengo fuori... purtroppo non dispongo di un buon
testo a cui fare riferimento, uso le guide java su 
html.it
 e 
java.sun.com
,
ma è dannatamente complicato trovare un (quasi) dettaglio come questo...
anzi se avete consigli su una qualche guida reperibile in rete, li accetto
ben volentieri.
Grazie
Wil

 Mi scuso se la domanda puň essere banale, ma programmavo in c++ e passando

Ciao, premesso che ho poca esperienza anch'io, ti mando un listato in 
cui ho semplificato un po' il tuo contesto, ma dovrebbe rispondere al 
tuo quesito:
/*
  * RadioBtnTest.java
  * Created on 14-ott-2003
  * Test
  *
  */
import javax.swing.*;
import java.awt.event.*;
public class RadioBtnTest {
 
	static int NUMERO_RAZZE = 3;
	private String[] nomi_razza = {
		"Siamese",
		"Burmese",
		"Persiano"
	};
	private JFrame frame;
	private JPanel contentPnl;
	private JRadioButton[] razzeRadioButton;
	private ButtonGroup buttonGroup1 = new ButtonGroup();
	private JLabel displayLbl;
 
	public RadioBtnTest() {
		frame = new JFrame("Test");
		contentPnl = new JPanel();
		displayLbl = new JLabel("scegli razza");
		razzeRadioButton = new JRadioButton[NUMERO_RAZZE];
		for (int i=0; i < NUMERO_RAZZE; i++) {
			razzeRadioButton[i] = new JRadioButton();
			razzeRadioButton[i].setText(nomi_razza[i]);
			buttonGroup1.add(razzeRadioButton[i]);
 
			razzeRadioButton[i].addItemListener(
				new ItemListener() {
					public void itemStateChanged(ItemEvent evt) {
						for (int j = 0; j < NUMERO_RAZZE; j++) {
							if (evt.getSource() == razzeRadioButton[j]) {
								displayLbl.setText(nomi_razza[j]);							
							}
						}
					}
			});
			/*
			 * Alternativa piů concisa valida in casi come
			 * questo:
			 *
			razzeRadioButton[i].addActionListener(
				new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						displayLbl.setText(e.getActionCommand());
					}
				}
			);
			*/
			contentPnl.add(razzeRadioButton[i]);			
		} // end for
		contentPnl.add(displayLbl);
		frame.getContentPane().add(contentPnl);
		frame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent evt) {
				System.exit(0);
			}
		});
		frame.pack();
		frame.setVisible(true);
	} // end constructor
 
     public static void main(String[] args) {
     	RadioBtnTest app = new RadioBtnTest();
     }
} // END CLASS
Riguardo testi validi su cui studiare, se leggi l'inglese (credo di si, 
visto che leggi la doc. sun), un ottimo libro scaricabile interamente 
dal sito č "Thinking in Java" di Bruce Eckel 
http://www.bruceeckel.com/
Ne esiste anche un'edizione stampata e tradotta in italiano anche se non 
č l'ultima versione.
Dovrebbe essere gratuito anche questo libro (anch'esso edito e 
disponibile in libreria): Java Mattone dopo Mattone: 
http://www.java-net.it/download.html
Io perň non lo conosco bene.
Utile (ma non proprio introduttiva) č la guida di Mokabyte 
www.mokabyte.it
 Questa pure si trova in libreria, volendo.
Spero di essere stato utile. Saluti.
jGandalf

 Spero di essere stato utile. Saluti.
Utilissimo! Ti ringrazio!
Alla prossima
Wil

...


Naturalmente questo pezzo di codice:
public class RadioBtnTest {
     static int NUMERO_RAZZE = 3;
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
andava inteso:
    private final int NUMERO_RAZZE = 3;
            ^^^^^
piccolo lapsus...
  inoltre dopo:
if (evt.getSource() == razzeRadioButton[j]) {
     displayLbl.setText(nomi_razza[j]);
ci sta bene anche un bel
      break; // o per gli estremisti j= NUMERO_RAZZE;
così si esce dal ciclo evitando di fare i successivi confronti inutili.
Ciao.
jGandalf
