Scusate se sono stato poco chiaro. Innanzitutto non mi ero accorto che il copia incolla aveva modificato alcune righe (in particolare quelle dell'uso dell'array bidimensionale), non chiedetemi perchè; cmq riallego il codice. In ogni caso compilando funziona, con i problemi di cui ho parlato prima.
Codice PHP:
public class MineSweeperGraph extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
int righeScacc = 3;
int colScacc = 5;
int dimCasella = 25;
// ////////////////////////////////////////////////////
// dichiarazione oggetti (pulsanti, label textfield,panel)
// ////////////////////////////////////////////////////
// button
JButton button_restart = new JButton("Nuova Partita");
JButton[][] button_scacchiera = new JButton[righeScacc][colScacc];
public MineSweeperGraph(String titolo) { // viene visualizzato come titolo della
// finestra
super(titolo);// richiama il costruttore della superclasse Jframe
// passando come parametro la stringa da visualizzare
// sulla barra del titolo
getContentPane().setLayout(null);
//creo 1 bottone x casella
for (int i = 0; i < righeScacc; i++){
for(int j = 0; j < colScacc; j++){
button_scacchiera[i][j] = new JButton("");
}
}
// button_field.setBounds(119,26,100,38); //setto la dimensione
button_restart.setBounds(10, 26, 120, 38); // setto la dimensione
button_restart.addActionListener(this);//aggiungo il pulsante
for (int i = 0; i < righeScacc; i++){
for (int j = 0; j < colScacc; j++){
button_scacchiera[i][j].setBounds(10 + (j*dimCasella) , 100 + (i*dimCasella), dimCasella, dimCasella);
button_scacchiera[i][j].addActionListener(this);//aggiungo il pulsante
}
}
// ////////////////////////////////////////////////////
// metto quello che voglio sia disegnato nel jpanel
// ///////////////////////////////////////////////////
getContentPane().add(button_restart);
for (int i = 0; i < righeScacc; i++){
for (int j = 0; j < colScacc; j++){
getContentPane().add(button_scacchiera[i][j]);
}
}
setResizable(false);
setBounds(100, 100, 800, 650);
setVisible(true); // x rendere visibile il frame(di default non lo è)
}
public void actionPerformed( ActionEvent e){
int num;
int xMax = 3;
int yMax = 5;
Object target = e.getSource();
//creazione della scacchiera(messa così crea e riempie 1 scacchiera ogni volta
//che viene premuto un tasto e quindi non va bene (mi servirebbe ne crei 1 all'inizio
//e mantenga quella per tutta la partita
StatoCorrente statoCorrente = new StatoCorrente(xMax,yMax);
if (target == button_restart){
//se viene premuto il pulsante "nuova partita", viene creata la scacchiera
statoCorrente= new StatoCorrente(xMax,yMax);
System.out.println("\n\nstampa della scacchiera completa");
statoCorrente.stampaScacchiera(xMax, yMax);
}
/*
*quando l'utente preme la casella di coordinate [x][y]
*deve partire gestisciUtente, che valuta se la casella cliccata è una mina o meno.
*decide se la partita può proseguire e segna come visitata la casella
*/
for (int x = 0; x < xMax; x++){
for (int y = 0; y < yMax; y++){
if (target == button_scacchiera[x][y]){
statoCorrente.gestisciInputUtente(x,y, xMax, yMax);
statoCorrente.stampaScacchieraUtente(x,y,xMax, yMax);
}
}
}
}
public static void main( String [] args ){
new MineSweeperGraph( "Campo minato" ).setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Per quanto riguarda quel che mi serve, diciamo che il programma in sostanza è il gioco campo minato di windows. A livello grafico il programma crea una scacchiera grande 5 x 3 fatta di pulsanti (sarebbe il classico rettangolo di campo minato).
Ho creato il metodo per creare la scacchiera a livello di contenuto(quindi decidere dove sono le mine e indicare in ogni altra casella quante mine ha intorno), ma non so come far sì che, nel momento in cui viene disegnata la scacchiera, venga subito creato anche il contenuto della scacchiera e non solo il disegno. Per ora tale creazione avviene ad ogni pressione di un pulsante, cosa che non va assolutamente bene: dovrebbe essere creata solo una volta all'inizio e poi ogni volta che si preme il button_restart.
La scacchiera è 1 oggetto creato così:
Codice PHP:
StatoCorrente statoCorrente = new StatoCorrente(xMax,yMax);
Dove xMax e yMax sono le due dimensioni della scacchiera.
Non ho riportato la classe StatoCorrente perchè funziona e non devo modificarla. Vi basti sapere che crea e gestisce la scacchiera a livello di contenuto.
Mi fermerei al primo problema visto che sto mi sto già dilungando. Non so se sono stato più chiaro adesso.
Comunque se mi sapete dare il link di un buon tutorial sull'uso dei jFrame apprezzo, visto che mi rendo conto che andare troppo a tentoni rischia di essere poco produttivo...
Grazie a chi risponde, spero di essere stato un po' più chiaro.