Newsgroup: it.comp.java
Titolo: conoscere posizione in un array (anche bidimensionale) di bottoni..(urgente)

Ho un dubbio che mi devo levare nel minor tempo possibile...io ho un'array
di bottoni inizializzati con un ciclo...esempio:
Button b;
for (int i=0; i<x;i++)
{
b = new Button(""+i);
b.addActionListener(this);
array[i] = b;
}
successivamente ad una pressione è possibile sapere quale bottone è stato
premuto...o meglio in che posizione dell'array si trova?
Una cosa funzionante è fare un confronto con ogni posizione dell'array...
if(e.getSource()==array[0]) ...etc..etc....if(e.getSource()==array[n])
potrei usare un while (e.getSource()!=array[i]){i++;} e alla fine scoprirei
la posizione...
Ma il problema sorge in array bidimensionale...
Suggerimenti?
grazie
Byez
B@STI
--
Per rispondere in privato, togliere .yo

Io sono abbastanza newbie, però ti dico lo stesso cosa penso (così, se mi
correggono, imparo!).
Con un array di bottoni così come l'hai impostato tu, non mi vengono in
mente altre soluzioni se non quella da te proposta (il problema con gli
array bidimensionali non lo vedo... fai due while uno dentro l'altro che
incrementano due indici diversi e hanno però lo stesso controllo di uscita).
Mi sembra però oneroso a livello di prestazioni, e mi sembrerebbe più
opportuno trovare altre soluzioni:
- ad esempio ho visto che usi l'indice nel nome: se non è un caso, puoi fare
qualcosa del tipo (scrivo a botta, non so se i metodi sono giusti, am l'idea
si dovrebbe capire):
Integer.parseInt(((Button)(e.getSource())).getName())
- un'altra soluzione, che ti lascia libertà sui nomi, potrebbe essere di
estendere la classe Button in modo che contenga un attributo pubblico
"indice" (di che tipo dipende dalle preferenze e dal numero di dimensioni
dell'array), oppure un attributo privato + metodo pubblico che ne
restituisce il valore. Quando istanzi il bottone gli passi il corrispondente
indice:
Buttons[i][j] = new MyButton(nome,indice)
e quando ne hai bisogno chiami il metodo che hai definito sull'oggetto
restituitoti da getSource().
Boh, sono un paio di idee buttate lì...
Ciao
Giacomo

 Giacomo
grazie
byez


Anch'io NON sono un esperto ma se i label dei pulsanti rispecchiano la loro
posizione nell'array basta castare il "getSource" come button e richiedere
la stringa "label"... essendo registrati all' ActionListener potresti
scoprire che l' array non serve ^___^.
Oppure "figlia" la classe Button con "Botton", classe contenente due
variabili (coordinate) ed i metodi per ottenerle...
Ma se senti idee che ti sembrano migliori... segui QUELLE...      ! ^_^ !

Sono stato "lento"... scusate.
Ho postato le stesse idee di Ciani   :-(    e pure in ritardo !   :-(
"Paolini Andrea" <liber...@SpaMlibero.it> ha scritto nel messaggio
news:3N_Ja.118377$lK4.3...@twister1.libero.it...


 Sto iniziando a perdere lucidità e non riesco a starti dietro :P
Ok, ci sono tanto modi per farlo (soprattutto tante tecniche per memorizzare
gli indici). Provo a dirtene uno, che vale indipendentemente da quante
dimensioni ha l'array di bottoni che vuoi usare:
//Definisci una classe che estende Button
class MyButton extends Button{
//dichiari un attributo di tipo int[] che memorizzerà
//gli indici del bottone nell'array
private int[] indexes;
//Definisci un costruttore che oltre la label accetta
//come parametro un array di interi rappresentante
//gli indici del bottone nell'array
public MyButton(String label, int[] idxs){
//Chiami il costruttore di Button passandogli la label
super(label);
//Memorizzi "in locale" gli indici che ti sono stati
//passati nel costrruttore
indexes=idxs;
}
//definisci un metodo per ottenre il valore degli indici
public int[] getIndexes(){
return indexes[];
}
}
Adesso, quando istanzi i tuoi bottoni ciclando su, ad esempio, 3 indici,
farai qualcosa del genere
for (int i....)
    for (int j...)
        for (int k...)
            buttonArray[i][j][k] = new MyButton("la label del bottone", new
int[] {i,j,k});
Non sono sicuro che si possa istanziare al volo l'array degli indici come ho
fatto io, al limie lo istanzi prima e poi glie lo passi nel costruttore.
Quando avrai bisogno di vedere gli indici di chi ha genberato l'evento,
nasterà che tu faccia:
((MyButton)e.getSource()).getIndexes()
e il gioco è fatto...
spero di essere stato chiaro e di non aver tirato sfondoni troppo grossi
;-)
Ciao
Giacomo