Java permette anche di avere delle CLASSI ANONIME. Questo significa che puoi associare ad ogni pulsante un ActionListener dedicato anche senza conoscere a priori il numero di questi ActionListener.
Se devi, per esempio gestire k pulsanti puoi fare una cosa del genere: inserire questi k pulsanti in un array di k elementi e associare a ciascuno di questi un ActionListener:
codice:
for (int i=0; i<k; i++) {
pulsante[k].addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
gestisciPulsante(ae);
}
});
}
A questo punto, puoi estendere la classe Button (o JButton) e fare in modo che abbia un indice interno leggibile tramite un metodo. Così puoi usare il tanto amato switch:
codice:
public class MioBottone extends Button {
private int indice;
public MioBottone(int indice) { this.indice = indice; }
public int getIndice() { return indice; }
...
}
public gestisciPulsante(ActionEvent ae) {
MioBottone mb = ((MioBottone) ae.getSource());
switch (mb.getIndice()) {
case 0: // primo pulsante (ma gli indici puoi sempre farli partire da 1)
break;
...
}
}
In questo modo dovrei aver risolto anche al tuo secondo problema (che era legatissimo al primo...).
Per il punto 3, a parte usare l'hashing come ti hanno già suggerito, non vedo altre soluzioni semplici.
Ciao.