Programmazione.it
Greenpeace
passaggio di parametri con i jframe
Scritto da Alberto Rizzardini a.k.a. albrescia il 04-01-2009 ore 14:12
Salve a tutti,
premetto che mi sto avvicinando adesso all'uso dei jframe e quindi nn ho molta esperienza.
Sto facendo tramite java il programma campo minato, ho creato la scacchiera tramite jframe a livello grafico e ora sto cercando di attuare la gestione. Per ora ho gestito tutto tramite JButton (quindi la scacchiera è composta da una serie di bottoni) e tramite il metodo actionPerformed faccio in modo che alla pressione di 1 casella della scacchiera, il suo contenuto venga modificato. Al momento i miei + grossi crucci sono 2.
1) non so come fare a dire che la scacchiera deve essere inzializzata subito indipendentemente dai tasti premuti
2) non so come far sì che la scacchiera sia creata in modo da essere vista da tutti (così che quando premo il tasto venga modificata)

Al momento la grafica fa abbastanza schifo perchè mi sto occupando solo della gestione della scacchiera.
Le dimensioni della scacchiera sono pure fissi, sempre perchè voglio occuparmene dopo.
Per com'è ora actionPerformed la scacchiera viene creata ad ogni pressione (Cosa non bella...:( ).
Allego il codice. Grazie a chi risponde. Accetto anche eventuali link a guide, visto che al momento non dispongo di materiale decente su jframe e l'università è chiusa.

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class MineSweeperGraph extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;
int righeScacc = 3;
int colScacc = 5;
int dimCasella = 25; //25
//int hCasella = 40;

// ////////////////////////////////////////////////////
// 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[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[j].setBounds(10 + (j*dimCasella) , 100 + (i*dimCasella), dimCasella, dimCasella);
button_scacchiera[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[j]);
//System.out.print( i + "," + j + " ");
}
//System.out.println("");
}

setResizable(false);
setBounds(100, 100, 800, 650);
setVisible(true); // x rendere visibile il frame(di default non lo è)
}
public void actionPerformed( ActionEvent e){ //nella ver originale usato come tipo boolean
int num;
int xMax = 3;
int yMax = 5;
Object target = e.getSource();

StatoCorrente statoCorrente = new StatoCorrente(xMax,yMax);
if (target == button_restart){
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
*/

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);
}

}
Copyright Programmazione.it® 1999-2005. Tutti i diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002.