Inverter o Estado do JButton

6 respostas Resolvido
java
P

Olá. Estou precisando de ajuda, acho que é mais de lógica. kkk
Tenho ], em um projeto, um painel de botoes, simulando um teclado no qual, após o click ele fica desabilitado, preciso criar um botão para DESFAZER este estado, ou seja, habilitar novamente o botão que foi clicado. Eu não sei como passar o parâmetro para o botão desfazer. Veja a imagem:

image

Cada tecla tem seu código elaborado da seguinte forma:

//============== Letra B

private void btnBActionPerformed(java.awt.event.ActionEvent evt) {

lblLetra.setText(B);

btnB.setEnabled(false);

moveFocoParaEnter();

}

//============== Letra N

private void btnNActionPerformed(java.awt.event.ActionEvent evt) {

lblLetra.setText(N);

btnN.setEnabled(false);

moveFocoParaEnter();

}

//============== Letra M

private void btnMActionPerformed(java.awt.event.ActionEvent evt) {

lblLetra.setText(M);

btnM.setEnabled(false);

moveFocoParaEnter();

}

//============== Botão Desfazer

private void btnDesfazerActionPerformed(java.awt.event.ActionEvent evt) {

btnX.setEnabled(false);

(receber a última tecla digitada) e fazer

(ultima_tecla.setEnabled(true).

}

//==========

Acho que deveria enviar o nome da tecla digitada para o botão desfazer

e ao clicar nele, (desfazer) enviaria o novo estado para a tecla.

Mas não estou sabendo como.

Alguém pode me ajudar?

Obrigado.

6 Respostas

F

Fala ai @PapaiLu uma pergunta de projeto, esse botão deve desfazer todos os botoes que estão desabilitados ou somente o ultimo desabilitado.
Exemplo:
Ao CLicar em desfazer ele habilita todos os botoes ou

Nessa opção se vc tivesse 5 botoes desabilitados vc precisaria clicar 5 vezes no desfazer.
Ao CLicar em desfazer ele habilita cada botão desabilitado na sequencia inversa(do ultimo clicado ate o primeiro clicado)

Abraços
Max

P

Oi. Bom dia. Somente o último click, ou seja, só a última tecla usada.

P

Penso que cada letra (botão) pressionada, seria “memorizada” pelo botão desfazer.

D
Solucao aceita

De uma forma não muito sofisticada mas funcional, você poderia simplesmente ter um atributo de uma List de JButton que guarda as referências dos botões clicados.
Na sua classe você cria um atributo:

private List listBotoes = new ArrayList<>();

E em cada listener de cada botão que você já criou, você adiciona o botao clicado na Lista, por exemplo abaixo seria o botão da Letra “B” (Você faz isso com todos):
//============== Letra B
private void btnBActionPerformed(java.awt.event.ActionEvent evt) {
lblLetra.setText(“B”);
btnB.setEnabled(false);
listBotoes.add(btnB);
moveFocoParaEnter();
}

E no botão “Desfazer” você seta enabled no último botão adicionado na Lista e então remove ele da Lista, por exemplo:

//============== Botão Desfazer
private void btnDesfazerActionPerformed(java.awt.event.ActionEvent evt) {
if (!listBotoes.isEmpty()) {
int indexUltimoBotao = listBotoes.size() - 1;
JButton ultimoBotao = listBotoes.get(indexUltimoBotao);
ultimoBotao.setEnabled(true);
listBotoes.remove(indexUltimoBotao);
}
}

F

Fala ai @PapaiLu, essa solução do @Daniel95 é utilizando o conceito de Pilha, com certeza seria um método bem funcional para se fazer. Dessa maneira utilizando um List voce conseguiria armazenar ate todas as teclas do teclado.

Abraços
Max

P

QUE LINDOOOOOOOOO!

Funcionou direitinho. Obrigado mesmo viu.

Criado 1 de fevereiro de 2019
Ultima resposta 1 de fev. de 2019
Respostas 6
Participantes 3