Olá! Sou novo por aqui e queria saber se alguém pode me ajudar.
Estava querendo desejar um tabuleiro de xadrez em um JPanel, usando paint()
Tenho motivos para usar o paint() mesmo e também para chamar o paint() casa por casa do tabuleiro; mas somente a última casa é pintada.
Inicialmente achei que o repaint() limpava toda a tela, mas li que ele não faz isso. De qualquer forma, para garantir coloquei:
public void update(Graphics g) {
paint(g);
}
Minha segunda suspeita é que o repaint() estava sendo chamado muito rapidamente e, entrava para a "fila de execução", assim somente o último era executado. Para tentar resolver (ou ao menos debugar) isso, criei a variável esperaRepaint e aparentemente deu deadlock :(
Alguma sugestão?
(estou colando as funções principais)
int atualizarX=-1; int atualizarY=-1;
int esperaRepaint=0;
int size=500;
public void updateSquare(int i, int j) {
atualizarX=i;
atualizarY=j;
while(esperaRepaint == 1) { }
esperaRepaint = 1;
repaint(posicao2pixels(atualizarX), posicao2pixels(atualizarY), size/8, size/8);
}
public Tabuleiro() {
int i, j;
// fix size to a multiple of 8
size=8*(int)(size/8);
posicaoInicial();
for(i=0; i<7; i++) {
for(j=0; j<7; j++) {
updateSquare(i, j);
}
}
add(new JLabel("aaaaaaa"));
addMouseListener(new Acao());
} public void paint(Graphics g) {
if (atualizarX != -1) {
if ((atualizarX+atualizarY) % 2 == 0) { g.setColor(Color.WHITE); }
else { g.setColor(new Color(0, 128+3*(atualizarX+atualizarY), 0)); }
g.fillRect(posicao2pixels(atualizarX), posicao2pixels(atualizarY), size/8, size/8);
atualizarX = -1;
esperaRepaint = 0;
}
}
Obrigado!
