Ciao a tutti
sto sviluppano un progetto in java per l'università e dobbiamo implementare gli scacchi

Per quanto riguarda la scacchiera abbiamo creato un JPanel con gridlayout e, dentro, in un ciclo for gli abbiamo fatto aggiungere al layout JButton o JLabel: abbiamo in pratica un layout 10x10 con nel contorno le jlabel che indicano le coordinate e subito all'inteno 8x8 jbutton

ad ogni jbutton abbiamo dato un nome che riporta le sue coordinate, nonchè un background color bianco/nero a seconda di quale casella rappresenta in scacchiera
nella fase di inserimento dei jbutton, scorriamo una lista che contiene tutti i pezzi, e che avevamo già creato e riempito in precedenza, e in base al pezzo fa un setIcon sul jbutton


abbiamo anche implementato la action listener e, al primo clik del mouse prendiamo il nome del jìbutton e cambiamo il suo sfondo in giallo, al secondo clik prendiamo ancora il name e impostiamo lo sfondo in giallo, dopodichè avendo partenza e destinazione richiamiamo un metodo che dovrà eseguire i vari controlli e far fare la mossa al pezzo in questione


vi riporto il codice dell'action listener implementata
codice:
	public class BottoneClick implements ActionListener {
		
		public void actionPerformed(ActionEvent evento) {
			conta_click++;
			JButton source_partenza = new JButton();
			JButton source_destinazione = new JButton();
			Color bg_partenza, bg_destinazione;
			if (conta_click == 1){
				source_partenza = (JButton)evento.getSource();
				//source_partenza.setSelected(true);
				source_partenza.setBackground(Color.YELLOW);
				partenza = source_partenza.getName();
				/*
				System.out.println("conta_click = " + conta_click);
				System.out.println("destinazione = " + destinazione);
				System.out.println("partenza = " + partenza);
				*/
			}else{
				source_destinazione = (JButton)evento.getSource();
				//source_destinazione.setSelected(true);
				source_destinazione.setBackground(Color.YELLOW);
				destinazione = source_destinazione.getName();
				/*
				System.out.println("conta_click = " + conta_click);
				System.out.println("destinazione = " + destinazione);
				System.out.println("partenza = " + partenza);
				*/
			}
			if (conta_click == 2) {
				//Gioca mossa = new Gioca(partenza, destinazione, scacchi, lista_pezzi);
				conta_click = 0;
				/*
				System.out.println("conta_click = " + conta_click + "- Gioco la mossa");
				System.out.println("destinazione = " + destinazione);
				System.out.println("partenza = " + partenza);
				*/
				spostaPezzo(partenza, destinazione, source_partenza, source_destinazione);
			}
		}
	}
questo è il metodo richiamato dall'action listener nel caso di secondo click effettuato:
codice:
	public void spostaPezzo(String partenza, String destinazione, JButton bottone_partenza, JButton bottone_destinazione){
		// togliamo 1 in quanto la dimensione del tavolo e' 10 e quella della matrice 8
		int partenza_X = Integer.parseInt(partenza.substring(0,1));
		int partenza_Y = Integer.parseInt(partenza.substring(1));
		int destinazione_X = Integer.parseInt(destinazione.substring(0,1));
		int destinazione_Y = Integer.parseInt(destinazione.substring(1));

		
		for (Iterator i = lista_pezzi.iterator() ; i.hasNext();){
			Pezzo pezzo = (Pezzo)i.next();
			
			if (pezzo.getCoordinate().compareTo((partenza_X-1) + "" + (partenza_Y-1)) == 0){
				pezzo.cambiaPosizione(partenza_X, partenza_Y, destinazione_X, destinazione_Y, bottone_partenza, bottone_destinazione);
			}
		}
		
	}
e questo il metodo cambiaPosizione dell'oggetto pezzo:
codice:
	public void cambiaPosizione(int partenza_X, int partenza_Y, int destinazione_X, int destinazione_Y, JButton bottone_partenza, JButton bottone_destinazione){
		System.out.println("Coordinate iniziali del Pezzo: X = " + super.coord_X + " Y = " + super.coord_Y);
		System.out.println("Coordinate iniziali passate: X = " + partenza_X + " Y = " + partenza_Y);
		bottone_partenza.setIcon(null);
		bottone_partenza.setBackground(Color.RED);
		setIcona(bottone_destinazione);
		bottone_destinazione.setBackground(Color.RED);
		
		setCoordinate(destinazione_X-1, destinazione_Y-1);
		System.out.println("Coordinate finali: X = " + destinazione_X + " Y = " + destinazione_Y);
		System.out.println("Coordinate finali del Pezzo: X = " + super.coord_X + " Y = " + super.coord_Y);
	}
a parte i system.out che ci sono di debug, praticamente il bottone di partenza, nell'ultimo metodo che ho riportato, dovrebbe tornare al colore originario (bianco/nero) e la sua icona scomparirebbe, mentre nella destinazione torna il colore di fondo originario e ha impostata l'icona relativa al pezzo che ora lo occupa

I colori originali di fondo li abbiamo impostati a red per vedere che succedeva, ma eseguendo si verifica questo:
1. primo click: il jbutton ha il background che diventa giallo, l'event prende il suo nome
2. secondo clik: il jbutton ha bg che diventa giallo, l'event prende il nome
3. l'action invoca il metodo spostaPezzo
4. spostaPezzo invoca cambia Posizione
5. il jbutton di partenza rimane con fondo giallo e la stessa icona che aveva in precedenza, quello di destinazione diventa con fondo rosso e l'icona del pezzo che ora lo occupa

in pratica sembra che i jbutton non si rinfreschino da soli .. è normale o c'è qualche comando che li fa riaggiornare? Oppure dobbiamo far vedere nuovamente tutto il jpanel?

ringrazio già da ora chi ci aiuterà ... noi siamo a smadonnare da 2gg per risolvere sta cosa