Pagina 1 di 1

[JAVA] Window bloccate

Inviato: sabato 20 settembre 2008, 23:24
da Antòn87
Salve a tutti...
Volevo sapere se sia possibile creare una finestra in java che blocca il flusso di esecuzione del programma fino a che l'utente non ha premuto il tasto invia(o OK). Mi spiego meglio.

Ho una classe inserimentoGiocatori

Codice: Seleziona tutto

[color=red]public class[/color] inserimentoGiocatori extends JFrame{
...
JButton invia = new JButton("invia");
invia.addActionListener(new ActionListener() {
   public void ActionPerformed(ActionEvent e) {
      //Azione importante da eseguire[/color]
   }
});
add(invia);

...
setVisible(true);
}
NB: C'è un azione importante da eseguire quando viene premuto il pulsante invia e deve essere eseguita proprio in quella posizione.

poi ho un pezzo di codice in cui c'è un'ipotetica classe Master che richiama la classe visuale inserimentoGiocatore:

Codice: Seleziona tutto

....
inserimentoGiocatore ig = new inserimentoGiocatore();
Master.getInstance().gioca()
Il mio problema è che il programma apre la finestra inserimentoGiocatori ma poi salta subito a Gioca e non attende che io prema il pulsante invia, senza aver eseguito l'azione importante(ovvero l'acquisizione dei nomi dei giocatori). Io ho bisogno che l'azione sia  intrapresa prima che venga richiamato il metodo Master.getInstance().gioca() (altrimenti il programma mi solleva un eccezione).

Dunque ho bisogno che il flusso d'esecuzione si blocchi finchè io nn prema il pulsante invia(così viene eseguita l'azione associata al listener e successivamente il metodo Master.getInstance().gioca())

Ho già provato con dei cicli è delle variabili booleane, ma l'unico risultato è quello di bloccare la finestra di inserimentoGiocatori()(Non risponde più)

Per altre ragioni nn posso neanche inserire il metodo gioca() all'interno del codice associato al Listener.

Ogni suggerimento sarà ben accetto. :)

Re: [JAVA] JFrame, Listener

Inviato: domenica 21 settembre 2008, 1:45
da Zoff
Il motivo per cui non si ferma è che Swing assegna ad ogni Frame/Window un thread separato...
E' sufficiente quindi che dai un occhiata a come si sincronizzano i thread con le funzioni wait() e signal().

ciauz

Re: [JAVA] JFrame, Listener

Inviato: domenica 21 settembre 2008, 12:38
da Antòn87
Sono riuscito a risolvere il problema precedente cambiando il tipo di Window
da JFrame a JDialog  e settando la modalità della finestra a true.

poi tramite il seguente codice

Codice: Seleziona tutto

JFrame jFrame = new JFrame(); //creo una jFrame
jFrame.setVisible(false);
inserimentoGiocatori is = new inserimentoGiocatori(jFrame)  // in inserimentoGiocatori super(jFrame)

new TavolaFrame(); //stampa la tavola da Gioco
Sono riuscito a bloccare il flusso fino a quando la finestra non viene chiusa. Dunque tutte le operazioni sono eseguite nell'ordine corretto.

Il problema adesso è che quando chiamo l'istruzione per la stampa della Tavola la nuova finestra non risponde. Vengono solo disegnati i contorni ma la finestra rimane bloccata.

Qual'è il prob?  ???

Re: [JAVA] JFrame, Listener

Inviato: domenica 21 settembre 2008, 13:17
da Zoff
Antòn87 ha scritto: Sono riuscito a risolvere il problema precedente cambiando il tipo di Window
da JFrame a JDialog  e settando la modalità della finestra a true.

poi tramite il seguente codice

Codice: Seleziona tutto

JFrame jFrame = new JFrame(); //creo una jFrame
jFrame.setVisible(false);
inserimentoGiocatori is = new inserimentoGiocatori(jFrame)  // in inserimentoGiocatori super(jFrame)

new TavolaFrame(); //stampa la tavola da Gioco
Sono riuscito a bloccare il flusso fino a quando la finestra non viene chiusa. Dunque tutte le operazioni sono eseguite nell'ordine corretto.

Il problema adesso è che quando chiamo l'istruzione per la stampa della Tavola la nuova finestra non risponde. Vengono solo disegnati i contorni ma la finestra rimane bloccata.

Qual'è il prob?  ???

Bisogna che ci dai più informazioni sul codice, i motivi potrebbero essere mille!

Re: [JAVA] Window bloccate

Inviato: domenica 21 settembre 2008, 14:28
da Antòn87
Questa è la classe Master
Svolge le normali operazioni di amministrazione del gioco
La funzione incriminata è initParteDinamica() all'interno del metodo nuovaPartita()

Codice: Seleziona tutto

package monopoli;
import java.io.*;
import monopoli.gui.inserimentoGiocatori;
import monopoli.gui.TavolaFrame;
import java.util.*;


import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileNameExtensionFilter;

import monopoli.partecipanti.*;
import monopoli.casella.Immobili;
import monopoli.util.*;
import monopoli.tavola.*;
import monopoli.casella.*;

public class Master {

	// JChooser .. Dialgo per salvare il file
	private JFileChooser chooser = null;
	private  static Master master;

	static final int MAX_GIOCATORI = 6;
	private int NUM_GIOCATORI;

	public Tavola tavola;
		
	public static final long idPartita = new Date().getTime(); 

	private ArrayList<Giocatore> giocatori = new ArrayList<Giocatore>();
	private int turno;
	private inserimentoGiocatori is; //classe boundary inserimentoGiocatori
	private TavolaFrame tf = null;			//classe boundary TavolaFrame
	
	private boolean fineGioco;	
			
	public static Master getInstance() {
		if (master == null) {
			master = new Master();
		}
		return master;
	}

	public void setTavolaFrame(TavolaFrame tf) {
		this.tf = tf;
	}
	
	public void setChooser() {
		FileNameExtensionFilter filter;
		chooser = new JFileChooser();
		chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		String extd[] = { "dat" };
		filter = new FileNameExtensionFilter("File dat", extd);
		chooser.setFileFilter(filter);		
	}
	
	/**
	 * Setta il numero di Giocatori 
	 * @param String
	 */
	public void setNUM_GIOCATORI(int NUM_GIOCATORI) {
		getInstance().NUM_GIOCATORI = NUM_GIOCATORI; 
	}
	
	public int getNUM_GIOCATORI() {
		return NUM_GIOCATORI;
	}
	
	public JFileChooser getFileChooser() {
		return chooser;
	}
	
	public void setNomiGiocatori(String[] nomiG) {
		try {
			giocatori = Banca.getInstance().preparazioneGiocatori(nomiG);
		} catch (BancarottaException e) {}
	}
	
	public void setFineGioco(boolean bool) {
		fineGioco = bool;
	}

	private Master() { // no-arg Constructor
		setChooser();
	}
	
	/**
	 * Stampa lo stato del Giocatore
	 */
	public void stampaStatoGiocatori() {
		for (int i = 0; i < giocatori.size(); i++) {
			System.out.println("----------------------------");
			System.out.println("|     GIOCATORE "+(i+1)+"     ");
			giocatori.get(i).stampa();
		}
	}
	
	/**
	 * Effettua le fasi di preparazione necessarie per avviare una nuova partita
	 * initPartitaStatica(), initParteDinamica()..
	 */
	public void nuovaPartita() {
		// init della parte statica
		initParteStatica(); 
		// init della parte dinamica
		initParteDinamica();				
								
		turno = 0;
		fineGioco = false;
	}
	

	private void initParteStatica() {

		// inizializzo il set delle proprietà della banca
		Set<Proprieta> proprietaBanca = new HashSet<Proprieta>();
		for (int i = 0; i < Tavola.getInstance().getNUM_CASELLE(); i++) {
			if (Tavola.getInstance().getCasella(i) instanceof Proprieta) {
				Proprieta proprieta = (Proprieta)Tavola.getInstance().getCasella(i);
				proprietaBanca.add(proprieta);
			}
		}
		Banca.init(proprietaBanca, 32, 12);

	}

	private void initParteDinamica() {	
		
		JFrame frame = new JFrame();
		frame.setVisible(false);
		is = new inserimentoGiocatori(frame);
	        tf = new TavolaFrame();
	}

	/**
	 * Metodo che gestisce le fasi di gioco
	 */
	public void gioca() {	
		while (!fineGioco) {
			Giocatore giocatore = getGiocatoreCorrente();
			if (Tavola.getInstance().getCasella(giocatore.getPosizioneCorrente()) instanceof Prigione && !(giocatore.getTransito())) {
				// Se il giocatore è in Prigione non spostarlo
			} else {
				System.out.println("Giocatore " + giocatore.getNome() + " premi un tasto per lanciare i dadi");
	
				spostaGiocatore(giocatore, giocatore.lanciaDadi());
			}
			// Azione
			Tavola.getInstance().getCasella(giocatore.getPosizioneCorrente()).Azione();
			cambiaTurno();
		}
	}

	public void spostaGiocatore(Giocatore giocatore, int valoreDado) {		
		System.out.println("Valore Dadi: "+valoreDado);
		int indicePosizione = giocatore.getPosizioneCorrente();
		int nuovoIndice = (indicePosizione + valoreDado) % Tavola.getInstance().getNUM_CASELLE();

		if (nuovoIndice <= indicePosizione || valoreDado > Tavola.getInstance().getNUM_CASELLE()) {
			try {
				giocatore.passaDalVia();
			} catch (BancarottaException e) {}
		}
		giocatore.setPosizioneCorrente(nuovoIndice);	
		System.out.println("Il giocatore "+giocatore.getNome()+" si trova sulla casella "+Tavola.getInstance().getCasella(giocatore.getPosizioneCorrente()).getNome());
		//cambiaTurno();
	}
	
	public void setFineGioco() {
		fineGioco = true;
	}

	public void cambiaTurno() {
		turno = (turno + 1) % getNumeroDiGiocatori();
	}

	public ArrayList<Giocatore> getGiocatori() {
		return giocatori;
	}
	
	private int getNumeroDiGiocatori() {
		return giocatori.size();
	}


	public Giocatore getGiocatoreCorrente() {
		return getGiocatore(turno);
	}

	public Giocatore getGiocatore(int index) {
		return (Giocatore) giocatori.get(index);
	}
	
	/**
	 * Effettua un salvataggio su Disco dello stato di una Partita
	 */
	public void salvaPartita() throws FileNotFoundException, IOException {
		int retval;			//Descrittore del file ritornato
		String name = null; //Nome File
		String extension;	
		
		File file = new File("*.dat");
		getInstance().getFileChooser().setSelectedFile(file);
		retval = getInstance().getFileChooser().showSaveDialog(new JFrame());
		if (retval == JFileChooser.APPROVE_OPTION) {
			file = getFileChooser().getSelectedFile();
			name = file.getAbsolutePath().toString();
		}
		
		ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(name));
		
		oos.writeInt(turno);
		oos.writeBoolean(fineGioco);
		oos.writeObject(giocatori);
		oos.writeObject(Banca.getInstance().getProprietaPossedute());
		oos.writeInt(Banca.getInstance().getNumCase());
		oos.writeInt(Banca.getInstance().getNumAlberghi());
		oos.close();
		
	}
	/**
	 * Effettua la lettura da disco di una partita
	 */
	public void caricaPartita() throws FileNotFoundException, IOException, ClassNotFoundException {
			
		int retval;
		String name = null;		
		
		retval = getInstance().getFileChooser().showOpenDialog(new JFrame());
		if (retval == JFileChooser.APPROVE_OPTION) {
			File file = chooser.getSelectedFile();
			name = file.getAbsolutePath().toString();
		}
		ObjectInputStream ois = new ObjectInputStream (new FileInputStream(name));
				
		turno = ois.readInt();
		fineGioco = ois.readBoolean();
		giocatori = (ArrayList<Giocatore>)ois.readObject();
		
		// Setta i poprietari dei Terreni  
		for (int i = 0; i <= getNumeroDiGiocatori() - 1; i++) {
			
			ArrayList<Terreno> Terreni = getGiocatore(i).getTerreni();
			ArrayList<Societa> Societa = getGiocatore(i).getSocieta();
			ArrayList<Stazione> Stazioni = getGiocatore(i).getStazioni();
			
			for (int j = 0; j <= Terreni.size() - 1; j++) {
				Terreno corrente = (Terreno)Casella.perNome(Terreni.get(j).getNome());
				corrente.setProprietario(getGiocatore(i));
			}
			
			for (int j = 0; j <= Societa.size() - 1; j++) {
				Societa corrente = (Societa)Casella.perNome(Societa.get(j).getNome());
				corrente.setProprietario(getGiocatore(i));
			}
			
			for (int j = 0; j <= Stazioni.size() - 1; j++) {
				Stazione corrente = (Stazione)Casella.perNome(Stazioni.get(j).getNome());
				corrente.setProprietario(getGiocatore(i));
			}
		}
		Banca.getInstance().init((Set<Proprieta>)ois.readObject(), ois.readInt(), ois.readInt());
		ois.close();
	}	
	
	/**
	 * Elimina il giocatore dal Gioco corrente
	 * Cede tutte le proprieta possedute alla Banca e re-imposta 
	 * i terreni ceduti come acquistabili
	 * @param g giocatore corrente
	 */
	public void eliminaGiocatore(Giocatore g) {
		for (int i = 0; i <= giocatori.size() - 1; i++) {
			if (g.getNome().equals(giocatori.get(i).getNome())) {
				ArrayList<Terreno> Terreni = g.getTerreni();
				ArrayList<Societa> Societa = g.getSocieta();
				ArrayList<Stazione> Stazioni = g.getStazioni();
				
				for (int j = 0; j <= Terreni.size() - 1; j++) 
					if (Terreni.get(j).getNumImmobili().ordinal() != 0) {
						Immobili numImmobili = Terreni.get(j).getNumImmobili();
						switch(numImmobili) {
						case ALBERGO:
							Banca.getInstance().setNumAlberghi(Banca.getInstance().getNumAlberghi() + 1);
							Terreni.get(j).setNumImmobili(Immobili.ZERO);
							Terreni.get(j).setAcquistabile(true);
							Terreni.get(j).setProprietario(null);
							break;
						case UNO:
						case DUE:
						case TRE:
						case QUATTRO:
							Banca.getInstance().setNumCase(Banca.getInstance().getNumCase() + Terreni.get(i).getNumImmobili().ordinal());
							Terreni.get(j).setNumImmobili(Immobili.ZERO);
							Terreni.get(j).setAcquistabile(true);
							Terreni.get(j).setProprietario(null);
							break;
						case ZERO:
							Terreni.get(j).setAcquistabile(true);
							Terreni.get(j).setProprietario(null);
							break;							
						}
					}
				for (int j = 0; j <= Societa.size() - 1; j++) {
					Societa.get(j).setAcquistabile(true);
					Societa.get(j).setProprietario(null);
				}
				
				for (int j = 0; j <= Stazioni.size() - 1; j++) {
					Stazioni.get(j).setAcquistabile(true);
					Stazioni.get(j).setProprietario(null);
				}
				
				// elimina il giocatori dalla lista dei giocatori disponibili
				giocatori.remove(giocatori.get(i));
			}
		}
	}

l'altra è la classe che si occpa della stampa della tavola
Stampa a  video un JFrame con la Tavola da gioco del monopoli (memorizza le coordinate di ogni casella)

Codice: Seleziona tutto

package monopoli.gui;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;

import monopoli.Master;

/**
 * @class TavolaFrame
 * Visualizza la tavola da gioco 
 * e il menu
 **/
public class TavolaFrame extends JFrame implements ActionListener {
	private JPanel c ;
	private int x, y, width, height;
	private Insets insets;
	private int[] posteggioGratuitoXY, vialeMarcoPoloXY, imprevistiNXY, corsoMagellanoXY, largoColomboXY,
					stazioneNordXY, vialeCostantinoXY, vialeTraianoXY, socAcquaPotabileXY, piazzaGiulioCesareXY,
					vaiInPrigioneXY, piazzaDanteXY, corsoRaffaelloXY, probabilitaWXY, viaVerdiXY, stazioneOvestXY,
					piazzaUniversitaXY, corsoAteneoXY, socElettricaXY, viaAccademiaXY, transitoXY, prigioneXY,
					vialeVesuvioXY, vialeMonterosaXY, imprevistiSXY, bastioneGranSassoXY, stazioneSudXY, 
					tassaPatrimonialeXY, vicoloStrettoXY, probabilitaSXY, vicoloCortoXY, viaXY, viaRomaXY,
					corsoImperoXY, probabilitaEXY, largoAugustoXY, stazioneEstXY, imprevistiEXY, vialeDeiGiardiniXY,
					tassaDiLussoXY, parcoDellaVittoriaXY;
	
	public static void main(String args[]) {
		TavolaFrame tf = new TavolaFrame();
	}	
	
	public TavolaFrame() {
		// TODO Auto-generated constructor stub
		super ("Monopoly");
		initialize();
	}
	
	public void initialize() {		
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setJMenuBar(createMenuBar());
		setLayout(new FlowLayout());
		setContentPane(stampaTavola());
		setSize(width, height);
		setVisible(true);		
	}
	
	public JPanel stampaTavola() {
		if (c == null) {
			c = new JPanel();
			c.setLayout(null);
			x = y = 0;
			insets = c.getInsets();
			
			//creo la casella PosteggioGratuito
			ImageIcon posteggioGratuito = new ImageIcon("Immagini\\imgCaselle\\posteggioGratuito.png");
			JLabel posteggioGratuitoJL = new JLabel(posteggioGratuito, JLabel.CENTER);
			Dimension posteggioGratuitoSZ = posteggioGratuitoJL.getPreferredSize();
			posteggioGratuitoJL.setBounds(0, 0, posteggioGratuitoSZ.width, posteggioGratuitoSZ.height);
			c.add(posteggioGratuitoJL);
			
			//Setto le coordinate della casela posteggioGratuito
			posteggioGratuitoXY = new int[2];
			posteggioGratuitoXY[0] = posteggioGratuitoXY[1] = 0;				
			x = insets.left + posteggioGratuitoSZ.width;
			
			//creo la casella vialeMarcoPolo
			ImageIcon vialeMarcoPolo = new ImageIcon("Immagini\\imgCaselle\\vialeMarcoPolo.png");
			JLabel vialeMarcoPoloJL = new JLabel(vialeMarcoPolo, JLabel.CENTER);
			Dimension vialeMarcoPoloSZ = vialeMarcoPoloJL.getPreferredSize();
			vialeMarcoPoloJL.setBounds(x, y, vialeMarcoPoloSZ.width, vialeMarcoPoloSZ.height);
			c.add(vialeMarcoPoloJL);
			
			//Setto le coordinate della casella vialeMarcoPolo
			vialeMarcoPoloXY = new int[2];
			vialeMarcoPoloXY[0] = x;
			vialeMarcoPoloXY[1] = y;
			x += vialeMarcoPoloSZ.width;
			
			//creo la casella imprevisti
			ImageIcon imprevistiN = new ImageIcon("Immagini\\imgCaselle\\imprevistiN.png");
			JLabel imprevistiNJL = new JLabel(imprevistiN, JLabel.CENTER);
			Dimension imprevistiNSZ = imprevistiNJL.getPreferredSize();
			imprevistiNJL.setBounds(x, y, imprevistiNSZ.width, imprevistiNSZ.height);
			c.add(imprevistiNJL);
			
			//Setto le coordinate della casella 
			imprevistiNXY = new int[2];
			imprevistiNXY[0] = x;
			imprevistiNXY[1]= y; 
			x += imprevistiNSZ.width;
			
			//creo la casella corsoMagellano
			ImageIcon corsoMagellano = new ImageIcon("Immagini\\imgCaselle\\corsoMagellano.png");
			JLabel corsoMagellanoJL = new JLabel(corsoMagellano, JLabel.CENTER);
			Dimension corsoMagellanoSZ = corsoMagellanoJL.getPreferredSize();
			corsoMagellanoJL.setBounds(x, y, corsoMagellanoSZ.width, corsoMagellanoSZ.height);
			c.add(corsoMagellanoJL);
			
			//Setto le coordinate della casella
			corsoMagellanoXY = new int[2];
			corsoMagellanoXY[0] = x;
			corsoMagellanoXY[1] = y;
			x += corsoMagellanoSZ.width;
			
			//creo la casella largo Colombo
			ImageIcon largoColombo = new ImageIcon("Immagini\\imgCaselle\\largoColombo.png");
			JLabel largoColomboJL = new JLabel(largoColombo, JLabel.CENTER);
			Dimension largoColomboSZ = largoColomboJL.getPreferredSize();
			largoColomboJL.setBounds(x, y, largoColomboSZ.width, largoColomboSZ.height);
			c.add(largoColomboJL);
			
			//setto le coordinate della caselal
			largoColomboXY = new int[2];
			largoColomboXY[0] = x;
			largoColomboXY[1] = y;
			x += largoColomboSZ.width;
			
			//creo la casella stazione Nord
			ImageIcon stazioneNord = new ImageIcon("Immagini\\imgCaselle\\stazioneNord.png");
			JLabel stazioneNordJL = new JLabel(stazioneNord, JLabel.CENTER);
			Dimension stazioneNordSZ = stazioneNordJL.getPreferredSize();
			stazioneNordJL.setBounds(x, y, stazioneNordSZ.width, stazioneNordSZ.height);
			c.add(stazioneNordJL);
			
			//setto le coordinate della casella
			stazioneNordXY = new int[2];
			stazioneNordXY[0] = x;
			stazioneNordXY[1] = y;
			x += stazioneNordSZ.width;
			
			//creo la casella viale Costantino
			ImageIcon vialeCostantino = new ImageIcon("Immagini\\imgCaselle\\vialeCostantino.png");
			JLabel vialeCostantinoJL = new JLabel(vialeCostantino, JLabel.CENTER);
			Dimension vialeCostantinoSZ = vialeCostantinoJL.getPreferredSize();
			vialeCostantinoJL.setBounds(x, y, vialeCostantinoSZ.width, vialeCostantinoSZ.height);
			c.add(vialeCostantinoJL);
			
			//setto le coordinate della casella
			vialeCostantinoXY = new int[2];
			vialeCostantinoXY[0] = x;
			vialeCostantinoXY[1] = y;
			x += vialeCostantinoSZ.width;
			
			//creo la casella viale Traiano
			ImageIcon vialeTraiano = new ImageIcon("Immagini\\imgCaselle\\vialeTraiano.png");
			JLabel vialeTraianoJL = new JLabel(vialeTraiano, JLabel.CENTER);
			Dimension vialeTraianoSZ = vialeTraianoJL.getPreferredSize();
			vialeTraianoJL.setBounds(x, y, vialeTraianoSZ.width, vialeTraianoSZ.height);
			c.add(vialeTraianoJL);
			
			//setto le coordinate della casella
			vialeTraianoXY = new int[2];
			vialeTraianoXY[0] = x;
			vialeTraianoXY[1] = y;
			x += vialeTraianoSZ.width;
			
			//creo la casella Soc.Acqua Potabile
			ImageIcon socAcquaPotabile = new ImageIcon("Immagini\\imgCaselle\\socAcquaPotabile.png");
			JLabel socAcquaPotabileJL = new JLabel(socAcquaPotabile, JLabel.CENTER);
			Dimension socAcquaPotabileSZ = socAcquaPotabileJL.getPreferredSize();
			socAcquaPotabileJL.setBounds(x, y, socAcquaPotabileSZ.width, socAcquaPotabileSZ.height);
			c.add(socAcquaPotabileJL);
			
			//setto le coordinate della casella
			socAcquaPotabileXY = new int[2];
			socAcquaPotabileXY[0] = x;
			socAcquaPotabileXY[1] = y;
			x += socAcquaPotabileSZ.width;
			
			//creo la casella piazza Giulio Cesare
			ImageIcon piazzaGiulioCesare = new ImageIcon("Immagini\\imgCaselle\\piazzaGiulioCesare.png");
			JLabel piazzaGiulioCesareJL = new JLabel(piazzaGiulioCesare, JLabel.CENTER);
			Dimension piazzaGiulioCesareSZ = piazzaGiulioCesareJL.getPreferredSize();
			piazzaGiulioCesareJL.setBounds(x, y, piazzaGiulioCesareSZ.width, piazzaGiulioCesareSZ.height);
			c.add(piazzaGiulioCesareJL);
			
			//setto le coordinate della casella
			piazzaGiulioCesareXY = new int[2];
			piazzaGiulioCesareXY[0] = x;
			piazzaGiulioCesareXY[1] = y;
			x += piazzaGiulioCesareSZ.width;
			
			//creo la casella vai In prigione
			ImageIcon vaiInPrigione = new ImageIcon("Immagini\\imgCaselle\\vaiInPrigione.png");
			Image vaiInPrigioneImg = vaiInPrigione.getImage();
			vaiInPrigioneImg = vaiInPrigioneImg.getScaledInstance(82, 83, Image.SCALE_DEFAULT);
			vaiInPrigione.setImage(vaiInPrigioneImg); 
			JLabel vaiInPrigioneJL = new JLabel(vaiInPrigione, JLabel.CENTER);
			
			Dimension vaiInPrigioneSZ = vaiInPrigioneJL.getPreferredSize();
			vaiInPrigioneJL.setBounds(x, y, vaiInPrigioneSZ.width, vaiInPrigioneSZ.height);
			c.add(vaiInPrigioneJL);
			
			//setto le coordinate della casella
			vaiInPrigioneXY = new int[2];
			vaiInPrigioneXY[0] = x;
			vaiInPrigioneXY[1] = y;			
			width = x + vaiInPrigioneSZ.width + 8;
			
			x = 0;
			y = insets.top + posteggioGratuitoSZ.height;
			
			//creo la casella piazza Dante
			ImageIcon piazzaDante = new ImageIcon("Immagini\\imgCaselle\\piazzaDante.png");
			JLabel piazzaDanteJL = new JLabel(piazzaDante, JLabel.CENTER);
			Dimension piazzaDanteSZ = piazzaDanteJL.getPreferredSize();
			piazzaDanteJL.setBounds(x, y, piazzaDanteSZ.width, piazzaDanteSZ.height);
			c.add(piazzaDanteJL);
			
			//setto le coordinate di PiazzaDante
			piazzaDanteXY = new int[2];
			piazzaDanteXY[0] = x;
			piazzaDanteXY[1] = y;
			y += piazzaDanteSZ.height;
			
			//creo la casella corso Raffaello
			ImageIcon corsoRaffaello = new ImageIcon("Immagini\\imgCaselle\\corsoRaffaello.png");
			JLabel corsoRaffaelloJL = new JLabel(corsoRaffaello, JLabel.CENTER);
			Dimension corsoRaffaelloSZ = corsoRaffaelloJL.getPreferredSize();
			corsoRaffaelloJL.setBounds(x, y, corsoRaffaelloSZ.width, corsoRaffaelloSZ.height);
			c.add(corsoRaffaelloJL);
			
			//setto le coordinate di corso Raffaello
			corsoRaffaelloXY = new int[2];
			corsoRaffaelloXY[0] = x;
			corsoRaffaelloXY[1] = y;
			y += corsoRaffaelloSZ.height;
			
			//creo la casella probabilita Ovest
			ImageIcon probabilitaW = new ImageIcon("Immagini\\imgCaselle\\probabilitaW.png");
			JLabel probabilitaWJL = new JLabel(probabilitaW, JLabel.CENTER);
			Dimension probabilitaWSZ = probabilitaWJL.getPreferredSize();
			probabilitaWJL.setBounds(x, y, probabilitaWSZ.width, probabilitaWSZ.height);
			c.add(probabilitaWJL);
			
			//setto le coordinate di probabilità
			probabilitaWXY = new int[2];
			probabilitaWXY[0] = x;
			probabilitaWXY[1] = y;
			y += probabilitaWSZ.height;
			
			//creo la casella via Verdi
			ImageIcon viaVerdi = new ImageIcon("Immagini\\imgCaselle\\viaVerdi.png");
			JLabel viaVerdiJL = new JLabel(viaVerdi, JLabel.CENTER);
			Dimension viaVerdiSZ = viaVerdiJL.getPreferredSize();
			viaVerdiJL.setBounds(x, y, viaVerdiSZ.width, viaVerdiSZ.height);
			c.add(viaVerdiJL);
			
			//setto le coordinate di via Verdi
			viaVerdiXY = new int[2];
			viaVerdiXY[0] = x;
			viaVerdiXY[1] = y;
			y += viaVerdiSZ.height;
			
			//creo la casella stazione Ovest
			ImageIcon stazioneOvest = new ImageIcon("Immagini\\imgCaselle\\stazioneOvest.png");
			JLabel stazioneOvestJL = new JLabel(stazioneOvest, JLabel.CENTER);
			Dimension stazioneOvestSZ = stazioneOvestJL.getPreferredSize();
			stazioneOvestJL.setBounds(x, y, stazioneOvestSZ.width, stazioneOvestSZ.height);
			c.add(stazioneOvestJL);
			
			//setto le coordinate della stazione Ovest
			stazioneOvestXY = new int[2];
			stazioneOvestXY[0] = x;
			stazioneOvestXY[1] = y;
			y += stazioneOvestSZ.height;
			
			//creo la casella piazza Universita
			ImageIcon piazzaUniversita = new ImageIcon("Immagini\\imgCaselle\\piazzaUniversita.png");
			JLabel piazzaUniversitaJL = new JLabel(piazzaUniversita, JLabel.CENTER);
			Dimension piazzaUniversitaSZ = piazzaUniversitaJL.getPreferredSize();
			piazzaUniversitaJL.setBounds(x, y, piazzaUniversitaSZ.width, piazzaUniversitaSZ.height);
			c.add(piazzaUniversitaJL);
			
			//setto le coordinate di piazza Universita
			piazzaUniversitaXY = new int[2];
			piazzaUniversitaXY[0] = x;
			piazzaUniversitaXY[1] = y;
			y += piazzaUniversitaSZ.height;
			
			//creo la casella corso Ateneo
			ImageIcon corsoAteneo = new ImageIcon("Immagini\\imgCaselle\\corsoAteneo.png");
			JLabel corsoAteneoJL = new JLabel(corsoAteneo, JLabel.CENTER);
			Dimension corsoAteneoSZ = corsoAteneoJL.getPreferredSize();
			corsoAteneoJL.setBounds(x, y, corsoAteneoSZ.width, corsoAteneoSZ.height);
			c.add(corsoAteneoJL);
			
			//setto le coordinate di corso Ateneo
			corsoAteneoXY = new int[2];
			corsoAteneoXY[0] = x;
			corsoAteneoXY[1] = y;
			y += corsoAteneoSZ.height;
			
			//creo la casella Societa Elettrica
			ImageIcon socElettrica = new ImageIcon("Immagini\\imgCaselle\\socElettrica.png");
			JLabel socElettricaJL = new JLabel(socElettrica, JLabel.CENTER);
			Dimension socElettricaSZ = socElettricaJL.getPreferredSize();
			socElettricaJL.setBounds(x, y, socElettricaSZ.width, socElettricaSZ.height);
			c.add(socElettricaJL);
			
			//setto le coordinate della societa Eletrica
			socElettricaXY = new int[2];
			socElettricaXY[0] = x;
			socElettricaXY[1] = y;
			y += socElettricaSZ.height;
			
			//creo la casella via accademia
			ImageIcon viaAccademia = new ImageIcon("Immagini\\imgCaselle\\viaAccademia.png");
			JLabel viaAccademiaJL = new JLabel(viaAccademia, JLabel.CENTER);
			Dimension viaAccademiaSZ = viaAccademiaJL.getPreferredSize();
			viaAccademiaJL.setBounds(x, y, viaAccademiaSZ.width, viaAccademiaSZ.height);
			c.add(viaAccademiaJL);
			
			//setto le coordinate di via Accademia
			viaAccademiaXY = new int[2];
			viaAccademiaXY[0] = x;
			viaAccademiaXY[1] = y;
			y += viaAccademiaSZ.height;
			
			//creo la casella Transito(Prigione)
			ImageIcon transito = new ImageIcon("Immagini\\imgCaselle\\transito.png");
			JLabel transitoJL = new JLabel(transito, JLabel.CENTER);
			Dimension transitoSZ = transitoJL.getPreferredSize();
			transitoJL.setBounds(x, y, transitoSZ.width, transitoSZ.height);
			c.add(transitoJL);
			
			//setto le coordinate di transito
			transitoXY = new int[2];
			transitoXY[0] = x;
			transitoXY[1] = y;
			
			
			//creo la casella prigione
			ImageIcon prigione = new ImageIcon("Immagini\\imgCaselle\\prigione.png");
			JLabel prigioneJL = new JLabel(prigione, JLabel.CENTER);
			Dimension prigioneSZ = prigioneJL.getPreferredSize();
			prigioneJL.setBounds(x + 28, y, prigioneSZ.width, prigioneSZ.height);
			c.add(prigioneJL);
			
			height = y + transitoSZ.height + 55;
			
			//setto le coordinate della prigione
			prigioneXY = new int[2];
			prigioneXY[0] = x + 28;
			prigioneXY[1] = y;
			
			x = vialeMarcoPoloXY[0];
			y = piazzaDanteXY[1];			
			
			//creo la plancia
			ImageIcon plancia = new ImageIcon("Immagini\\imgCaselle\\plancia.png");
			JLabel planciaJL = new JLabel(plancia, JLabel.CENTER);
			Image planciaImg = plancia.getImage();
			planciaImg = planciaImg.getScaledInstance(457, 452, Image.SCALE_SMOOTH);
			plancia.setImage(planciaImg);
			
			Dimension planciaSZ = planciaJL.getPreferredSize();
			planciaJL.setBounds(x, y, planciaSZ.width, planciaSZ.height);
			c.add(planciaJL);
			
			x = vialeMarcoPoloXY[0];
			y = prigioneXY[1];
			
			//creo la casella viale Vesuvio
			ImageIcon vialeVesuvio = new ImageIcon("Immagini\\imgCaselle\\vialeVesuvio.png");
			JLabel vialeVesuvioJL = new JLabel(vialeVesuvio, JLabel.CENTER);

			Dimension vialeVesuvioSZ = vialeVesuvioJL.getPreferredSize();
			vialeVesuvioJL.setBounds(x, y, vialeVesuvioSZ.width, vialeVesuvioSZ.height);
			c.add(vialeVesuvioJL);
			
			//setto le coordinate della regione
			vialeVesuvioXY = new int[2];
			vialeVesuvioXY[0] = x;
			vialeVesuvioXY[1] = y;
			x += vialeVesuvioSZ.width;
			
			//creo la casella viale Monterosa
			ImageIcon vialeMonterosa = new ImageIcon("Immagini\\imgCaselle\\vialeMonterosa.png");
			JLabel vialeMonterosaJL = new JLabel(vialeMonterosa, JLabel.CENTER);
			Dimension vialeMonterosaSZ = vialeMonterosaJL.getPreferredSize();
			vialeMonterosaJL.setBounds(x, y, vialeMonterosaSZ.width, vialeMonterosaSZ.height);
			c.add(vialeMonterosaJL);
			
			//setto le coordinate  viale Monterosa
			vialeMonterosaXY = new int[2];
			vialeMonterosaXY[0] = x;
			vialeMonterosaXY[1] = y;
			x += vialeMonterosaSZ.width;
			
			//creo la casella imprevisti Sud
			ImageIcon imprevistiS = new ImageIcon("Immagini\\imgCaselle\\imprevistiS.png");
			JLabel imprevistiSJL = new JLabel(imprevistiS, JLabel.CENTER);
			Dimension imprevistiSSZ = imprevistiSJL.getPreferredSize();
			imprevistiSJL.setBounds(x, y, imprevistiSSZ.width, imprevistiSSZ.height);
			c.add(imprevistiSJL);
			
			//setto le coordinate di Imprevisti Sud
			imprevistiSXY = new int[2];
			imprevistiSXY[0] = x;
			imprevistiSXY[1] = y;
			x += imprevistiSSZ.width;
			
			
			//creo la casella bastioniGran Sasso
			ImageIcon bastioneGranSasso = new ImageIcon("Immagini\\imgCaselle\\bastioneGranSasso.png");
			JLabel  bastioneGranSassoJL = new JLabel( bastioneGranSasso, JLabel.CENTER);
			Dimension  bastioneGranSassoSZ =  bastioneGranSassoJL.getPreferredSize();
			bastioneGranSassoJL.setBounds(x, y,  bastioneGranSassoSZ.width,  bastioneGranSassoSZ.height);
			c.add(bastioneGranSassoJL);
			
			//setto le coordinate di bastione Gran Sasso
			bastioneGranSassoXY = new int[2];
			bastioneGranSassoXY[0] = x;
			bastioneGranSassoXY[1] = y;
			x +=  bastioneGranSassoSZ.width;
			
			//creo la casella Stazione Sud
			ImageIcon stazioneSud = new ImageIcon("Immagini\\imgCaselle\\stazioneSud.png");
			JLabel  stazioneSudJL = new JLabel(stazioneSud, JLabel.CENTER);
			Dimension  stazioneSudSZ =  stazioneSudJL.getPreferredSize();
			stazioneSudJL.setBounds(x, y, stazioneSudSZ.width,  stazioneSudSZ.height);
			c.add(stazioneSudJL);
			
			//setto le coordinate di stazione Sud
			stazioneSudXY = new int[2];
			stazioneSudXY[0] = x;
			stazioneSudXY[1] = y;
			x +=  stazioneSudSZ.width;
			
			//creo la casella Tassa Patrimoniale
			ImageIcon tassaPatrimoniale = new ImageIcon("Immagini\\imgCaselle\\tassaPatrimoniale.png");
			JLabel  tassaPatrimonialeJL = new JLabel(tassaPatrimoniale, JLabel.CENTER);
			Dimension tassaPatrimonialeSZ =  tassaPatrimonialeJL.getPreferredSize();
			tassaPatrimonialeJL.setBounds(x, y, tassaPatrimonialeSZ.width,  tassaPatrimonialeSZ.height);
			c.add(tassaPatrimonialeJL);
			
			//setto le coordinate della TassaPatrimoniale
			tassaPatrimonialeXY = new int[2];
			tassaPatrimonialeXY[0] = x;
			tassaPatrimonialeXY[1] = y;
			x +=  tassaPatrimonialeSZ.width;
			
			//creo la casella Vicolo Stretto
			ImageIcon vicoloStretto = new ImageIcon("Immagini\\imgCaselle\\vicoloStretto.png");
			JLabel  vicoloStrettoJL = new JLabel(vicoloStretto, JLabel.CENTER);
			Dimension vicoloStrettoSZ =  vicoloStrettoJL.getPreferredSize();
			vicoloStrettoJL.setBounds(x, y, vicoloStrettoSZ.width,  vicoloStrettoSZ.height);
			c.add(vicoloStrettoJL);
			
			//setto le coordinate di vicolo Stretto
			vicoloStrettoXY = new int[2];
			vicoloStrettoXY[0] = x;
			vicoloStrettoXY[1] = y;
			x +=  vicoloStrettoSZ.width;
			
			//creo la casella Probabilità Sud
			ImageIcon probabilitaS = new ImageIcon("Immagini\\imgCaselle\\probabilitaS.png");
			JLabel  probabilitaSJL = new JLabel(probabilitaS, JLabel.CENTER);
			Dimension probabilitaSSZ =  probabilitaSJL.getPreferredSize();
			probabilitaSJL.setBounds(x, y, probabilitaSSZ.width,  probabilitaSSZ.height);
			c.add(probabilitaSJL);
			
			//setto le coordinate di Prob Sud
			probabilitaSXY = new int[2];
			probabilitaSXY[0] = x;
			probabilitaSXY[1] = y;
			x +=  vicoloStrettoSZ.width;
			
			//creo la casella Vicolo Corto
			ImageIcon vicoloCorto = new ImageIcon("Immagini\\imgCaselle\\vicoloCorto.png");
			JLabel  vicoloCortoJL = new JLabel(vicoloCorto, JLabel.CENTER);
			Dimension vicoloCortoSZ =  vicoloCortoJL.getPreferredSize();
			vicoloCortoJL.setBounds(x, y, vicoloCortoSZ.width,  vicoloCortoSZ.height);
			c.add(vicoloCortoJL);
			
			//setto le coordinate di vicolo corto
			vicoloCortoXY = new int[2];
			vicoloCortoXY[0] = x;
			vicoloCortoXY[1] = y;
			x +=  vicoloCortoSZ.width;
			
			//creo la casella Vicolo corto
			ImageIcon via = new ImageIcon("Immagini\\imgCaselle\\via.png");
			JLabel  viaJL = new JLabel(via, JLabel.CENTER);
			Dimension viaSZ =  viaJL.getPreferredSize();
			viaJL.setBounds(x, y, viaSZ.width,  viaSZ.height);
			c.add(viaJL);
			
			//setto le coordinate di vicolo corto
			viaXY = new int[2];
			viaXY[0] = x;
			viaXY[1] = y;
			y = piazzaDanteXY[1];
			
			//creo la casella via Roma
			ImageIcon viaRoma = new ImageIcon("Immagini\\imgCaselle\\viaRoma.png");
			JLabel viaRomaJL = new JLabel(viaRoma, JLabel.CENTER);
			Dimension viaRomaSZ = viaRomaJL.getPreferredSize();
			viaRomaJL.setBounds(x, y, viaRomaSZ.width, viaRomaSZ.height);
			c.add(viaRomaJL);
			
			//setto le coordinate di via roma
			viaRomaXY = new int[2];
			viaRomaXY[0] = x;
			viaRomaXY[1] = y;
			y += viaRomaSZ.height;
			
			//creo la casella corso Impero
			ImageIcon corsoImpero = new ImageIcon("Immagini\\imgCaselle\\corsoImpero.png");
			JLabel corsoImperoJL = new JLabel(corsoImpero, JLabel.CENTER);
			Dimension corsoImperoSZ = corsoImperoJL.getPreferredSize();
			corsoImperoJL.setBounds(x, y, corsoImperoSZ.width, corsoImperoSZ.height);
			c.add(corsoImperoJL);
			
			//setto le coordinate di corso Impero
			corsoImperoXY = new int[2];
			corsoImperoXY[0] = x;
			corsoImperoXY[1] = y;
			y += corsoImperoSZ.height;
			
			//creo la casella probabilità Est
			ImageIcon probabilitaE = new ImageIcon("Immagini\\imgCaselle\\probabilitaE.png");
			JLabel probabilitaEJL = new JLabel(probabilitaE, JLabel.CENTER);
			Dimension probabilitaESZ = probabilitaEJL.getPreferredSize();
			probabilitaEJL.setBounds(x, y, probabilitaESZ.width, probabilitaESZ.height);
			c.add(probabilitaEJL);
			
			//setto le coordinate di corso porbabilità Est
			probabilitaEXY = new int[2];
			probabilitaEXY[0] = x;
			probabilitaEXY[1] = y;
			y += probabilitaESZ.height;
			
			//creo la casella probabilità largo Augusto
			ImageIcon largoAugusto = new ImageIcon("Immagini\\imgCaselle\\largoAugusto.png");
			JLabel largoAugustoJL = new JLabel(largoAugusto, JLabel.CENTER);
			Dimension largoAugustoSZ = largoAugustoJL.getPreferredSize();
			largoAugustoJL.setBounds(x, y, largoAugustoSZ.width, largoAugustoSZ.height);
			c.add(largoAugustoJL);
			
			//setto le coordinate di larog Augustot
			largoAugustoXY = new int[2];
			largoAugustoXY[0] = x;
			largoAugustoXY[1] = y;
			y += largoAugustoSZ.height;
			
			//creo la casella probabilità Stazione Est
			ImageIcon stazioneEst = new ImageIcon("Immagini\\imgCaselle\\stazioneEst.png");
			JLabel stazioneEstJL = new JLabel(stazioneEst, JLabel.CENTER);
			Dimension stazioneEstSZ = stazioneEstJL.getPreferredSize();
			stazioneEstJL.setBounds(x, y, stazioneEstSZ.width, stazioneEstSZ.height);
			c.add(stazioneEstJL);
			
			//setto le coordinate della Stazione Est
			stazioneEstXY = new int[2];
			stazioneEstXY[0] = x;
			stazioneEstXY[1] = y;
			y += stazioneEstSZ.height;
			
			//creo la casella imprevisti Est
			ImageIcon imprevistiE = new ImageIcon("Immagini\\imgCaselle\\imprevistiE.png");
			JLabel imprevistiEJL = new JLabel(imprevistiE, JLabel.CENTER);
			Dimension imprevistiESZ = imprevistiEJL.getPreferredSize();
			imprevistiEJL.setBounds(x, y, imprevistiESZ.width, imprevistiESZ.height);
			c.add(imprevistiEJL);
			
			//setto le coordinate della casella imprevisti Est
			imprevistiEXY = new int[2];
			imprevistiEXY[0] = x;
			imprevistiEXY[1] = y;
			y += imprevistiESZ.height;
			
			//creo la casella vialeDeiGiardini
			ImageIcon vialeDeiGiardini = new ImageIcon("Immagini\\imgCaselle\\vialeDeiGiardini.png");
			JLabel vialeDeiGiardiniJL = new JLabel(vialeDeiGiardini, JLabel.CENTER);
			Dimension vialeDeiGiardiniSZ = vialeDeiGiardiniJL.getPreferredSize();
			vialeDeiGiardiniJL.setBounds(x, y, vialeDeiGiardiniSZ.width, vialeDeiGiardiniSZ.height);
			c.add(vialeDeiGiardiniJL);
			
			//setto le coordinate della casella viale dei Giardini
			vialeDeiGiardiniXY = new int[2];
			vialeDeiGiardiniXY[0] = x;
			vialeDeiGiardiniXY[1] = y;
			y += vialeDeiGiardiniSZ.height;
			
			//creo la casella tassa Di Lusso
			ImageIcon tassaDiLusso = new ImageIcon("Immagini\\imgCaselle\\tassaDiLusso.png");
			JLabel tassaDiLussoJL = new JLabel(tassaDiLusso, JLabel.CENTER);
			Dimension tassaDiLussoSZ = tassaDiLussoJL.getPreferredSize();
			tassaDiLussoJL.setBounds(x, y, tassaDiLussoSZ.width, tassaDiLussoSZ.height);
			c.add(tassaDiLussoJL);
			
			//setto le coordinate della casella tassa di Lusso
			tassaDiLussoXY = new int[2];
			tassaDiLussoXY[0] = x;
			tassaDiLussoXY[1] = y;
			y += tassaDiLussoSZ.height;
			
			//creo la casella parco Della Vittoria
			ImageIcon parcoDellaVittoria = new ImageIcon("Immagini\\imgCaselle\\parcoDellaVittoria.png");
			JLabel parcoDellaVittoriaJL = new JLabel(parcoDellaVittoria, JLabel.CENTER);
			Dimension parcoDellaVittoriaSZ = parcoDellaVittoriaJL.getPreferredSize();
			parcoDellaVittoriaJL.setBounds(x, y, parcoDellaVittoriaSZ.width, parcoDellaVittoriaSZ.height);
			c.add(parcoDellaVittoriaJL);
			
			//setto le coordinate della casella tassa di Lusso
			parcoDellaVittoriaXY = new int[2];
			parcoDellaVittoriaXY[0] = x;
			parcoDellaVittoriaXY[1] = y;			
			
		}
			return(c);
	}
	
	
		
		
		
	
	/**
	 * crea la barra dei menu
	 * @return jMenuBar
	 */
	private JMenuBar createMenuBar() {		
		//creo la barra dei Menu
		JMenuBar jMenuBar = new JMenuBar();
		JSeparator jSeparator;
		Font font = new Font("Arial", Font.PLAIN, 12);
		
		//creo il menu Menu Partita
		JMenu MenuPartita = new JMenu("Menu Partita");
		MenuPartita.setFont(font);
		MenuPartita.getPopupMenu().setLightWeightPopupEnabled(true);
		jMenuBar.add(MenuPartita);
		
		//creo il menu Contratto
		JMenu MenuContratto = new JMenu("Menu Contratto");
		MenuContratto.setFont(font);
		MenuPartita.getPopupMenu().setLightWeightPopupEnabled(true);
		jMenuBar.add(MenuContratto);
		
		//creo la voce stampaGiocatori(Menu Partita)
		JMenuItem StampaGiocatori = new JMenuItem("Stampa Giocatori");
		StampaGiocatori.addActionListener(this);
		StampaGiocatori.setFont(font);
		MenuPartita.add(StampaGiocatori);
		
		//creo la voce stampaPartita(Menu Partita)
		JMenuItem StampaPartita = new  JMenuItem("Stampa Partita");
		StampaPartita.setFont(font);
		StampaPartita.addActionListener(this);
		MenuPartita.add(StampaPartita);
		
		//aggiungo un separatore
		jSeparator = new JSeparator();
		MenuPartita.add(jSeparator);
		
		//creo la voce salvaPartita(Menu Partita)
		JMenuItem SalvaPartita = new JMenuItem("Salva Partita");
		SalvaPartita.addActionListener(this);
		SalvaPartita.setFont(font);		
		MenuPartita.add(SalvaPartita);
		
		//creo la voce caricaPartita(Menu Partita)
		JMenuItem CaricaPartita = new JMenuItem("Carica Partita");
		CaricaPartita.addActionListener(this);
		CaricaPartita.setFont(font);
		MenuPartita.add(CaricaPartita);
		
		//aggiungo un separatore
		jSeparator = new JSeparator();
		MenuPartita.add(jSeparator);
		
		//creo la voce esci(Menu Partita)
		JMenuItem Esci = new JMenuItem("Esci");
		Esci.addActionListener(this);
		Esci.setFont(font);
		MenuPartita.add(Esci);
		
		//creo la voce stampaTerreno(Menu Contratto)
		JMenuItem StampaTerreno = new JMenuItem("Stampa Terreno");
		StampaTerreno.addActionListener(this);
		StampaTerreno.setFont(font);
		MenuContratto.add(StampaTerreno);
		
		//creo la voce stampaStazione(Menu Contratto)
		JMenuItem StampaStazione = new JMenuItem("Stampa Stazione");
		StampaStazione.addActionListener(this);
		StampaStazione.setFont(font);
		MenuContratto.add(StampaStazione);
		
		//creo la voce stampaSocieta(MenuContratto)
		JMenuItem StampaSocieta = new JMenuItem("Stampa Societa");
		StampaSocieta.addActionListener(this);
		StampaSocieta.setFont(font);
		MenuContratto.add(StampaSocieta);
		
		return(jMenuBar);
	}
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String selection = e.getActionCommand();	//nome Azione
		
		//salca partita
		if (selection.equals("Salva Partita")) { 
			try {
				Master.getInstance().salvaPartita();
			} catch (Exception exc) {}
		}
		//carica partita		
		else if (selection.equals("Carica Partita")) {
			try {
				Master.getInstance().caricaPartita();
			} catch (Exception exc) {}
		}
		else if (selection.equals("Stampa Terreno")) {
			new ContrattoDialog("Terreno");
		}
		else if (selection.equals("Stampa Societa")) {
			new ContrattoDialog("Societa");
		}
		else if (selection.equals("Stampa Stazione"))
			new ContrattoDialog("Stazione");
				
		//esci
		else if (selection.equals("Esci")) { 
			System.exit(0);		
		}

	}

}
non capisco perchè la window tavolaFrame(all'interno del metodo initParteDinaminca() di Master) si blocchi?

Re: [JAVA] Window bloccate

Inviato: domenica 21 settembre 2008, 14:38
da Zoff
Il problema potrebbe stare nella classe inserimentoGiocatori...
Riesci a postare anche quella...

EDIT: Inoltre hai notato che passi a setSize() dentro inizialize() in TavolaFrame dei valori null?
A meno che non mi siano sfuggiti, i campi privati width e height non li setti mai...

Codice: Seleziona tutto

setSize(width, height);

Re: [JAVA] Window bloccate

Inviato: domenica 21 settembre 2008, 14:56
da Antòn87
Ti ringrazio Zoff per l'interessamento.
height e width sono settati all'interno del metodo. Infatti se lancio TavolaFrame dal main della classe viene correttamente visualizzata.

Inoltre la vera posizione di new TavolaFrame() è all'interno del Listener del pulsante ok. Prima l'ho riportata nel metodo initParteDinamica poichè nn avevo postato la classe inserimentoGiocatori(la posizione nn è importante).

Tuttavia se testo le classi visuali dai rispettivi main, fungono. Quando le creo da qualche altra parte nel porgramma si bloccano. Strano!?  ???

Posto inserimentoGiocatori

Codice: Seleziona tutto

package monopoli.gui;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JSeparator;
import javax.swing.JTextField;

import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Dimension;
import monopoli.*;



public class inserimentoGiocatori extends JDialog {

	private static final long serialVersionUID = 1L;
	private JTextField giocatoreField[] = null;//
	private JPanel jContentPane = null;
	private JPanel radioPanel = null;	
	private JLabel jLabel = null;
	private JRadioButton dueButton, treButton, quattroButton, cinqueButton, seiButton;
	private JButton invia;  //  @jve:decl-index=0:visual-constraint="342,78"
	private JPanel panel;
	private int numGiocatori;	// scelta numero Giocatori
	private String[] nomiG = null;
	
	
	

	/**
	 * This method initializes invia	
	 * 	
	 * @return javax.swing.JButton	
	 */	
	
	public int get_numGiocatori() {
		return(numGiocatori);		
	}
	
	public void set_numGiocatori(int num) {
		numGiocatori = num;		
	}
	
	public static void main(String args[]) {
		inserimentoGiocatori is = new inserimentoGiocatori(null);
	}
	
	
	/**
	 * This is the default constructor
	 */
	public inserimentoGiocatori() {
		super();
		set_numGiocatori(2);
		initialize();		
	}
	
	public inserimentoGiocatori(JFrame owner) {
		super(owner);
		set_numGiocatori(2);
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setModal(true);
		this.setSize(326, 125);
		this.setLocation(250,150);
		this.setContentPane(getJContentPane());
		this.setTitle("Monopoli - Inserimento Giocatori");	
		this.setAlwaysOnTop(true);
		this.setVisible(true);
	}
	
	/**
	 * Questo metodo crea un RadioPanel
	 * 
	 * @return javax.swin.JPanel
	 */
	public JPanel creaRadioButton() {
		
		//Creo un Jpanel radioPanel
		radioPanel = new JPanel();
		
		//Creo un ButtonGroup
		ButtonGroup group = new ButtonGroup();
		
		//Creo il RadioButton dueButton
		dueButton = new JRadioButton("2");
		dueButton.setSelected(true);
		dueButton.setActionCommand("DUEs");
		dueButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				set_numGiocatori(2);
			}
		});
		
		//Creo il RadioButton treButton
		treButton = new JRadioButton("3");
		treButton.setActionCommand("TREs");
		treButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				set_numGiocatori(3);
			}
		});
		
		//Creo il RadioButton quattroButton
		quattroButton = new JRadioButton("4");
		quattroButton.setActionCommand("QUATTROs");
		quattroButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				set_numGiocatori(4);
			}
		});
		
		//Creo il RadioButton cinqueButton
		cinqueButton = new JRadioButton("5");
		cinqueButton.setActionCommand("CINQUEs");
		cinqueButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				set_numGiocatori(5);
				
			}
		});
		
		//Creo il RAdioButton seiButton
		seiButton = new JRadioButton("6");
		seiButton.setActionCommand("SEIs");
		seiButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				set_numGiocatori(6);
			}
		});
		
		//Aggiungo i radioButton al ButtonGroup
		group.add(dueButton);
		group.add(treButton);
		group.add(quattroButton);
		group.add(cinqueButton);
		group.add(seiButton);
		
		//Aggiungo i radioButton al radioPanel
		radioPanel.add(dueButton);
		radioPanel.add(treButton);
		radioPanel.add(quattroButton);
		radioPanel.add(cinqueButton);
		radioPanel.add(seiButton);	
		
		
		//Ritorna il radioPanel		
		return(radioPanel);		
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {			
			
			BorderLayout borderLayout = new BorderLayout();
			
			//Creo la label espicativa			
			jLabel = new JLabel();
			jLabel.setText("Seleziona il numero di Giocatori: ");
			jLabel.setFont(new Font("Arial", Font.ITALIC, 12));
			//Imposto i bordi della label
			jLabel.setBorder(BorderFactory.createEmptyBorder(10, 15, 0, 0));
			
			//Creo il JPanel
			jContentPane = new JPanel();
			jContentPane.setBorder(BorderFactory.createEmptyBorder(0,0,2,0));
			
			//Imposto il layout			
			jContentPane.setLayout(borderLayout);
			
			//Aggiungo la label
			jContentPane.add(jLabel, BorderLayout.NORTH);
			
			//Aggiungo il groupRadioButton
			JComponent scelta = creaRadioButton();
			jContentPane.add(scelta, BorderLayout.CENTER);
			
			//Aggiungo il tasto invia
			jContentPane.add(inviaPanel(), BorderLayout.SOUTH);		
						
		}
		return(jContentPane);
	}
	
	/**
	 * Crea il panello con il tasto invia
	 * 
	 * @return panel
	 */
	public JPanel inviaPanel() {
		
		panel = new JPanel();
		//Creo il tasto invia
		invia = new JButton("invia");
		invia.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//Setta la variabile numGiocatori in Master
				Master.getInstance().setNUM_GIOCATORI(get_numGiocatori());
				System.out.print(get_numGiocatori());
							
				
				getJContentPane().remove(jLabel);	//rimuovo la label
				getJContentPane().remove(radioPanel);//rimuovo i radioButton
				getJContentPane().remove(panel);	//rimuovo il pulsante invia
				setContentPane(inserisciGiocatori());
			}
		});
		
		panel.add(invia);		
		return(panel);
	}
	
	public JComponent inserisciGiocatori() {
		// creo un nuovo pannello
		JPanel giocatori = new JPanel();		
		BorderLayout borderlayout = new BorderLayout();
		giocatori.setLayout(borderlayout);
		
		// Aggiungo il bottone ok
		JButton ok = new JButton("OK");
		JPanel jOkpane = new JPanel();
		ok.setToolTipText("Clicca per confermare");	
		jOkpane.add(ok);		
		
		//creo la label esplicatiova
		JLabel jlabel = new JLabel();
		jLabel.setText("Inserisci il nome dei Giocatori:");
		jLabel.setFont(new Font("Arial", Font.ITALIC, 12));
		//imposto i bordi della label
		jLabel.setBorder(BorderFactory.createEmptyBorder(10, 15, 10, 0));	
		giocatori.add(jLabel, BorderLayout.NORTH);
		
		//creo un array di label
		JLabel gLabel[] = new JLabel[6];
		//creo un aray di jTextField
		giocatoreField = new JTextField[6];
		
		JPanel gridPanel = new JPanel(new GridLayout(0,2));
		gridPanel.setBorder(BorderFactory.createEmptyBorder(0, 30, 0, 0));
		
		for (int i = 0; i <= 5; i++) { 
			gLabel[i] = new JLabel();
			gLabel[i].setText("Giocatore" + (i + 1) + " :");
			gLabel[i].setFont(new Font("Arial", Font.ITALIC, 12));
			
			giocatoreField[i] = new JTextField();			
		}
		
		for (int i = 0; i <= 5; i++) {
			gridPanel.add(gLabel[i]);
			gridPanel.add(giocatoreField[i]);			
		}
		
		//disabilito i jTextField superflui
		for (int i = Master.getInstance().getNUM_GIOCATORI(); i <= 5; i++) {
			giocatoreField[i].setEditable(false);	
			}
		
		
		ok.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {				
				
				String[] nomiG = new String[Master.getInstance().getNUM_GIOCATORI()];
				for (int i = 0; i < Master.getInstance().getNUM_GIOCATORI(); i++) {
					nomiG[i] = giocatoreField[i].getText();
					System.out.println(nomiG[i]);
				}
				Master.getInstance().setNomiGiocatori(nomiG);
				Master.getInstance();
				new TavolaFrame();				
				setVisible(false);				
			}	
		});		
				
		giocatori.add(gridPanel, BorderLayout.CENTER);
		giocatori.add(jOkpane, BorderLayout.SOUTH);
		giocatori.setBorder(BorderFactory.createEmptyBorder(1,0,2,0));
		setSize(326, 300);		
		
		return(giocatori);		
	}
}  //  @jve:decl-index=0:visual-constraint="12,0"

Re: [JAVA] Window bloccate

Inviato: lunedì 22 settembre 2008, 11:10
da Antòn87
Ho scoperto che il  problema non sono le classi visuali come inserimentoGiocatori, TavolaFrame, ecc...
il problema è il metodo gioca così definito:

Codice: Seleziona tutto

 public void gioca() {
    while (!finegioco) {
      // istruzione gestione gioco
   }
}
Infatti se rimuovo il metodo gioca() TavolaFrame si apre correttamente. Dunque il problema è il ciclo while che controlla il gioco.

E' possibile che un while blocchi i frame? E se si come posso risolvere questo problema? il while è indispensabile.

Re: [JAVA] Window bloccate

Inviato: lunedì 22 settembre 2008, 11:16
da Zoff
Antòn87 ha scritto: Ho scoperto che il  problema non sono le classi visuali come inserimentoGiocatori, TavolaFrame, ecc...
il problema è il metodo gioca così definito:

Codice: Seleziona tutto

 public void gioca() {
    while (!finegioco) {
      // istruzione gestione gioco
   }
}
Infatti se rimuovo il metodo gioca() TavolaFrame si apre correttamente. Dunque il problema è il ciclo while che controlla il gioco.

E' possibile che un while blocchi i frame? E se si come posso risolvere questo problema? il while è indispensabile.
E' possibilissimo, l'unica soluzione è un programma multi-thread...
In pratica implementi una classe che estende Thread o, meglio, implementa Runnable e metti il ciclo all'interno del metodo public void run().
I thread non sono subito simpatici però perché comportano problemi di sincronizzazione...
Fai qualche prova se però non riesci ad organizzarli cerca qualche guida a proposito su Google.

ciauz

Re: [JAVA] Window bloccate

Inviato: lunedì 22 settembre 2008, 15:08
da Antòn87
Per il momento ho creato una classe che estende Thread al cui interno ho posto il metodo Gioca e tutto sembra filare liscio,almeno per adesso.
Grazie della dritta Zoff. Spero di non trovarmi  più in problemi di questo tipo che mi hanno fatto perdere molto di tempo.