Problem z odświeżaniem obrazka (JButton)

0

Mam mały problem z tym kodem:

 
karta[1][3].awers.setVisible(false);
PanelGry.remove(karta[1][3].awers);
PanelGry.add(karta[1][3].obrazek);	
karta[1][3].obrazek.setVisible(true);

try
{
       Thread.sleep(2000);
}
catch (InterruptedException ex)
{
        ex.printStackTrace();
}

karta[z][w].obrazek.setVisible(false);
PanelGry.remove(karta[z][w].obrazek);
PanelGry.add(karta[z][w].awers);		
karta[z][w].awers.setVisible(true);				

karta[1][3].obrazek.setVisible(false);
PanelGry.remove(karta[1][3].obrazek);
PanelGry.add(karta[1][3].awers);	
karta[1][3].awers.setVisible(true);

Problem polega na tym, że program nie wykonuje jak by 4 pierwszych linijek. Jest stop 2 sekund i zmienia się obrazek na awers poprzedniej karty (karta[z][w]), ale karta [1][3] tak jak pokazywała awers to i tak pokazuje, nie ma tego obrazka, który powinnien (według mnie :P) być przed zatrzymaniem. Kod jest do gry Memory, wybieramy karte, pokazuje się obrazek, wybieramy drugą karte, powinnien pojawić się obrazek i jeśli nie są takie same powinny po pewnym czasie zniknąć.

Ktoś wie może, jak to naprawić ?

0

Po remove() i add() dodaj validate() i repaint().

0

Rozumiem, ze chodzi dokładnie o coś takiego:

 				  	
karta[1][3].awers.setVisible(false);
PanelGry.remove(karta[1][3].awers);
karta[1][3].awers.validate();
karta[1][3].awers.repaint();
PanelGry.add(karta[1][3].obrazek);	
karta[1][3].obrazek.validate();
karta[1][3].obrazek.repaint();
karta[1][3].obrazek.setVisible(true);

Jeśli tak to nie pomogło :/ Żeby też było jasne, drugi obrazek pojawia się gdy jest para (czyli nie ma potrzeby zakrywania obrazków).

0

Odświeżaj panel na którym to jest pokazywane.

panel_z_obrazkami.removeAll(); // usuwa wszystko z panelu
panel_z_obrazkami.add(...); //trzeba jeszcze raz wszystkie dodać 
panel_z_obrazkami.validate(); // odświeża panel
panel_z_obrazkami.repaint(); // rysuje panel na ekranie;
0

źle zrozumiałeś

PanelGry.validate();
PanelGry.repaint();
0

RemoveAll(); działa jak trzeba, czyli usuwa wszystko z panelu, ale dodawać jeszcze raz wszystko... Czyli przy każdej złej parze będzie mi usuwać, potem pętlą dodawać karty i znowu zła para i znowu usuwa wszystko, pętla... Hmmm, naprawdę nie ma łatwiejszego/lepszego sposobu ?

 
PanelGry.validate();
PanelGry.repaint();

Nie pomaga :/


 
PanelGry.removeAll(); // usuwa wszystko z panelu
PanelGry.validate();
PanelGry.repaint();
karta[1][3].cyfra = false;
				  		
for(int y=1;y<wysokosc;y++)
{
	for(int x=1;x<szerokosc;x++)
	{	
		if(karta[y][x].cyfra == true)
		{
			karta[y][x].awers.setBounds(karta[y][x].szer,karta[y][x].wys,100,120);
			PanelGry.add(karta[y][x].awers);
		}
								
		else if(karta[y][x].cyfra == false)
		{
		karta[y][x].obrazek.setBounds(karta[y][x].szer,karta[y][x].wys,100,120);
		PanelGry.add(karta[y][x].obrazek);
		}
	}
}

PanelGry.validate();
PanelGry.repaint();
				  		

     try
     {
              Thread.sleep(2000);
     }

     catch (InterruptedException ex)
     {
             ex.printStackTrace();
     }
             // czyszczenie();
}

Dobra, może ktoś wie, czemu pierw jest wykonywane zatrzymanie (czyli to co jest na samym końcu), a potem pętla ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1