Fazer com que uma ação espere até outra ser executada

2 respostas
java
Saulo_Monteiro

Olá, estou tendo uma dificuldade em uma aplicação java que desenvolvi, que simula um jogo de damas, porém, sua diferença é que durante o jogo, ao tentar capturar uma peça, um painel com uma pergunta e alternativas é mostrado, e o jogador deve responder corretamente para proceder com a ação. Neste caso são usadas 3 classes: Questoes (Possui a estrutura das questoes inseridas no banco de dados),TelaJogo (Tela onde roda o jogo de damas), e PainelQuestoes (Painel onde é mostrado uma questao aleatória do banco dedados). Bem, a minha dificuldade é com que a classe “TelaJogo” espere que a alternativa seja escolhida para ai então fazer a comparação, que no caso não é o que acontece. Na classe PainelQuestao, tem uma string “resposta” que recebe a string “correto” caso a alternativa escolhida seja correta, e a string “errado” caso a alternativa escolhida seja errada. Bom, o problema é que, ao iniciar o PainelQuestão, a string “resposta” ainda está vazia e é quando ocorre a comparação, eu gostaria de saber como faria para a ação comparação esperar até que uma alternativa seja escolhida. Segue o Código


public void actionPerformed(ActionEvent e) {

//SELEÇÃO CAPTURA PECA AZUL

//Eu fiz as ações das pessas serem baseadas na imagem que o botão possui, neste caso estou verificando se a peça a ser clicada está disponível a ser capturada. (pvc = peça vermelha captura)
if(e.getSource()==botao[l][c]){
		if(botao[l][c].getIcon()==pvc){
		        try {
				pq = new PainelQuestao();//se o botão atender os requisitos de captura, um painel com uma questão é instanciado.
			} catch (Exception e1) {
				e1.printStackTrace();
			}	
                    if(pq.getResposta()==pq.correto){ //verifica se a resposta está correta
                         if (botao[l-1][c-1].getIcon()==pas){//se sim, a captura prossegue
		         	botao[l][c].setIcon(cs);
		        	botao[l-1][c-1].setIcon(cs);
			        botao[l+1][c+1].setIcon(pa);
		     }
                     }else {
                     [...]
                     }

ActionPerformed da Classe PainelQuestao

public void actionPerformed(ActionEvent a) {

if(a.getSource()==jb1){//verifica se o botao clicado foi a primeira alternativa
		altEscolhida = jb1.getText(); //altEscolhida recebe o texto de jb1
		if(altEscolhida.equals(altCorreta)){// comparação com a alternativa correta
			setResposta(correto); //se sim, string resposta recebe a string correto
		}else{
			setResposta(errado);//se não, string resposta recebe a string errado
		}
		System.out.println(altEscolhida);//imprime a alternativa escolhida, a alternativa correta, e se a respota esta correta ou nao.
		System.out.println(altCorreta);
		JOptionPane.showMessageDialog(null,getResposta());
		setVisible(false);
	}
	if(a.getSource()==jb2){
		altEscolhida = jb2.getText();
		if(altEscolhida.equals(altCorreta)){
			setResposta(correto);
		}else{
			setResposta(errado);
		}
		System.out.println(altEscolhida);
		System.out.println(altCorreta);
		JOptionPane.showMessageDialog(null,getResposta());
		setVisible(false);
	}
	if(a.getSource()==jb3){
		altEscolhida = jb3.getText();
		if(altEscolhida.equals(altCorreta)){
			setResposta(correto);
			
		}else{
			setResposta(errado);
		}
		System.out.println(altEscolhida);
		System.out.println(altCorreta);
		JOptionPane.showMessageDialog(null,getResposta());
		setVisible(false);
	}
}

2 Respostas

staroski

Você está implementando seu código de forma estranha.
Posta o código completo de todas suas classes envolvidas.

Matheus_Dias3

Coloca o código completo ai mano, assim não da pra responder algo concreto

Criado 5 de dezembro de 2016
Ultima resposta 5 de dez. de 2016
Respostas 2
Participantes 3