PDA

View Full Version : [Java] Richiamare una serie di jButton in ciclo for


stefandre_nicari
08-03-2010, 13:22
Ho istanziato una matrice 3x3. Devo fare in modo di cambiare il Text di 9 jButton a seconda del valore presente nella corrispondente casella della matrice. I miei jButton si chiamano jButton1, jButton2, jButton 3 ecc fino a 9...il primo corrisponde al valore della 1^ riga, 1^ colonna della matrice, il secondo al valore valore della 1^ riga, 2^ colonna, il quarto 2^ riga, 1^ colonna.
Ad esempio se matrice[0][0]==1 devo fare jButton1.setText("X"), se 2 jButton1.setText("O"); se matrice[0][1]==1 jButton2.setText("X") ecc...
L'idea era il classico doppio for:

for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if (matr[i][j]==1){
jButton1.setText("X");
}
else {
if (matr[i][j]==2){
jButton1.setText("O");
}
}
}
}

Il problema è che l'oggetto da richiamare deve cabiare in funzione di i e j. Quando j diventa=2 l'oggetto dovrebbe essere il jButton2...Come faccio? Non mi piace l'idea di fare 9 if else...preferivo il ciclo....se si può ovviamente

DevilMalak
08-03-2010, 13:51
Non puoi usare un array di JButton? Cosi` facendo puoi richiamare ogni JButton con l'indice del for

banryu79
08-03-2010, 13:58
O ancora meglio un'altra matrice 3x3, questa volta di JButton, no? ;)
O ancora ancora meglio puoi "unire" un elemento della matrice con il JButton in una classe: quindi alla fine istanzierai una matrice di questi oggetti, che, al variare del valore automaticamente aggiornano il testo nel JButton stesso (mi pare che setText sia uno di quei pochi metodi di Swing a essere "thread safe"; cioè può essere invocato fuori dall'EDT senza problemi [e causa un repaint della grafica]).

stefandre_nicari
08-03-2010, 14:27
Ci avevo pensato...come faccio a "unire" un elemento della matrice con il JButton in una classe? cmq la matrice int mi serve...quindi se la matrice diventa solo di jButton non va bene...a meno che.....mmm...c penso in tanto che mi rispondere :D

DevilMalak
08-03-2010, 15:06
E una classe tipo 'Casella' contenente un JButton e un valore int? Poi fai una matrice 3x3 di Casella :D

banryu79
08-03-2010, 16:19
Hai due opzioni:

Ereditarietà:

public class Casella extends JButton
{
private int valore;
...
}


oppure Composizione:

public class Casella
{
private int valore;
private JButton button;
...
}

Vedi te quale ti piace di più :D