Utilização do valor de uma variável indicando o nome de um botão

Boa tarde amigos!

Sou novo em java, por gentileza, alguém pode me ajudar?

A dúvida é a seguinte:

Necessito de algo parecido com isso, ou outra sugestão.

// -----------------------------------------
String vNomeBotão = btn1;
vNomeBotão.getText();
// -----------------------------------------

Não é simplesmente essas duas linhas e sim o que elas me ajudariam com o meu código.

Somente isso! Obrigado!

O que você entende como “o nome de um botão”?

  1. O valor da propriedade name?
  2. O valor da propriedade text?
  3. O nome da variável que referencia o botão?

O que exatamente você quer fazer?

Olá staroski!
É o valor da propriedade name mesmo.

_______ variavel = btn1.getName(); // não sei que tipo da variável colocar, já usei Button, mas dá erro
// o botão já existe na form., não seria para criar outro botão, somente quero utilizar o nome do botão
verificarJogada(variavel);

// continuando o exemplo:

// função de verificação de jogada
private void verificarJogada(Button botao) {
if (botao.getText() == “X”) {
.
.
.
.
}
}

Estou desenvolvendo um jogo da velha, para trabalhar com IA.

O método getName() retorna um objeto do tipo String, então você fará:

String variavel = btn1.getName();

Mas parece estranho sua implementação, por que você precisa verificar um botão?

Olá, @alexandrezambon. Tudo bom?

Vi dois problemas em seu código, eis a explicação:

Primeiro: Para testar se duas Strings são iguais, use o método equals(), assim:

String str1 = "x";
String str2 = "y";

str1.equals(str2);

Retorna true se forem iguais.

Segundo: Se você está usando AWT para criar interfaces, use o método getLabel() para conseguir o nome que é exibido pelo botão na tela. O método getText() funciona apenas nos botões do Swing (JButton). Você pode perceber até que não existe método getText na classe awt.Button.

O método getName() retorna um atributo interno ao programa, algo que o usuário não vê.
Se você criar um Button na tela que diz “Clique em mim!”, e usar os métodos getLabel() e getName(), os retornos seriam “Clique em mim!” e “button0”, respectivamente.

Assim seu código poderia ficar desse jeito:

private void verificarJogada(Button botao) {
  if (botao.getLabel().equals(“X”)) {
    // seu código
  }
} 

Se você quiser realmente usar o getName(), pode definir o nome de cada botão usando o método setName(String name).

Dica: documentação da classe java.awt.Button.

Utilize o método getText(), o método getLabel() é deprecated há anos.

Desculpa se indiquei errado, mas fiz o teste antes de responder e não vi aviso de deprecated.
Não que não esteja, só quis esclarecer o porquê de eu ter indicado.
Obrigado pelo aviso!

Mas acho que entendi o que aconteceu, você está se referindo ao método getLabel() da classe JButton. Este sim está em desuso.
O alexandrezambon usou o AWT Button no código dele, o qual possui apenas o método getLabel(), sem o getText().

1 curtida

Bom dia!

// ao clicar na célula 1
private void btn1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
    if (btn1.getText() == "") {
        btn1.setText(txtSimboloHumano.getText());
        txtJogadorAtual.setText("Computador");
        txtNumeroJogada.setText("" + (Integer.parseInt(txtNumeroJogada.getText()) + 1));
        jogada.setHumano(1); // guardando a célula selecionada pelo humano para a IA
        try {
            verificarJogada();

           } catch (InterruptedException ex) {
            Logger.getLogger(telaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}                                    

private void verificarJogada() throws InterruptedException {

    // verificando se a primeira linha fechou o jogo
    if ((btn1.getText() == btn2.getText()) && (btn1.getText() == btn3.getText()) && (btn1.getText() != "") && (partida.isFinalizada() == false)) {
        if (btn1.getText() == "X") {
            if (txtSimboloComputador.getText() == "X") {
                partida.setVencedor("Computador");
            } else { // caso o simbolo seja "O" o vencedor e o humano
                partida.setVencedor("Humano");
            }
        } else {   // caso seja "O"
            if (txtSimboloComputador.getText() == "O") {
                partida.setVencedor("Computador");
            } else { // caso o simbolo seja "O" o vencedor e o humano
                partida.setVencedor("Humano");
            }
        }

        partida.setFinalizada(true);

        // efeito da linha vencedora
        if (partida.getVencedor() == "Computador") {
            btn1.setForeground(Color.red);
            btn2.setForeground(Color.red);
            btn3.setForeground(Color.red);
            txtVencedor.setForeground(Color.red);
        } else {
            btn1.setForeground(Color.blue);
            btn2.setForeground(Color.blue);
            btn3.setForeground(Color.blue);
            txtVencedor.setForeground(Color.blue);
        }

        // exibindo o vencedor
        panVencedor.setVisible(true);
        txtVencedor.setText(partida.getVencedor());
    }

    // verificando se a segunda linha fechou o jogo
    if ((btn4.getText() == btn5.getText()) && (btn4.getText() == btn6.getText()) && (btn4.getText() != "") && (partida.isFinalizada() == false)) {
        if (btn4.getText() == "X") {
            if (txtSimboloComputador.getText() == "X") {
                partida.setVencedor("Computador");
            } else { // caso o simbolo seja "O" o vencedor e o humano
                partida.setVencedor("Humano");
            }
        } else {   // caso seja "O"
            if (txtSimboloComputador.getText() == "O") {
            } else { // caso o simbolo seja "O" o vencedor e o humano
                partida.setVencedor("Humano");
            }
        }
        partida.setFinalizada(true);

        // efeito da linha vencedora
        if (partida.getVencedor() == "Computador") {
            btn4.setForeground(Color.red);
            btn5.setForeground(Color.red);
            btn6.setForeground(Color.red);
            txtVencedor.setForeground(Color.red);
        } else {
            btn4.setForeground(Color.blue);
            btn5.setForeground(Color.blue);
            btn6.setForeground(Color.blue);
            txtVencedor.setForeground(Color.blue);
        }

        // exibindo o vencedor
        panVencedor.setVisible(true);
        txtVencedor.setText(partida.getVencedor());
    }

esta é uma parte do código do jogo. O jogo em si funciona perfeitamente.

O que quis dizer com isso é que para cada “botão” clicado no jogo da velha, eu precisaria que ele indicasse que botão foi pressionado, para então modificar a função verificarJogada(), inserindo nessa função um parâmetro do botão selecionado.

Caso eu for utilizar uma string como parâmetro, não consigo ver solução, acho que porque desconheço, para sintetizar o código.

Ao meu ver eu consigo fazer esse código de uma maneira, vamos dizer, “burra”, pois os comandos são os mesmos para todas as verificações, somente informando botões diferentes.

Mas eu estou entendendo o que estão dizendo, eu acho que não estou consigo me expressar direito.

Obrigado à todos!

com relação ao botão, estou utilizando o Jbutton Swing.

gostaria de algo assim:

escolher a célula (é o botão1 pressionado);

verificarJogada(botão1)
se (botao1.getText() == “X” {
comando 1
comando 2
comando 3
.
.
.
}

isso faria com que reduzisse muito o código, utilizando somente uma instrução de “qualquer botão”, ao invés de escrever blocos de códigos iguais, alterando somente a condicionante “if” de cada botão.

Como é que você está pensando em implementar a lógica, pois o botão não deveria ter inteligência nenhuma.
Geralmente um jogo da velha é implementado contendo dois jogadores, o jogador atual é quem determina se a jogada é X ou O, não os botões.

staroski, sim, isso mesmo, dois jogadores, sendo:

jogador 1 = humano

jogador 2 = IA

a lógica toda está numa função jogadaComputador(), que seria outros quinhentos.

Como já te disse, o jogo funciona perfeitamente, estava querendo somente essa explicação para a sintetização.

Eu imaginaria que fossem questionar sobre tudo mesmo, sobre como é feito, da onde vem, para onde vai.

Por isso que no início não quis dizer muita coisa, era um “problema” simples, que começou a ficar grande, sendo que ele continua sendo simples.

Esquecendo o jogo da velha.

Dá para fazer o seguinte?

ao clicar de um botão qualquer, não importando o que ele fará, no evento de click, eu armazenaria o nome do botão numa classe botão, como:

botao.ultimoClick(btn1.getName());

// isso para mim já deu certo, sem questionar o getName, já deu certo e o retorno é uma String, esse elemento da classe só armazena String, também já deu certo.

nesse mesmo evento a próxima linha seria:

fazerQualquerCoisa(botao.ultimoClick.getText());

// até aí também deu certo, o problema vem agora, na função fazerQualquerCoisa(nomeBotao)

private void fazerQualquerCoisa(String nomeBotao) {

    if (nomeBotao.getText() == "isso") { // o problema é essa linha com erro, explico abaixo.
        comando 1
        comando 2
        comando 3
        .
        .
        .
}

Explicação do erro da linha:

if (nomeBotao.getText() == “isso”) {

Claro que a variável String não pode ter getText(), ela por si só já retorna uma String.
Mas necessito, sem qualquer justificativa questionável, verificar o texto (label) do último botão nessa condicionante “if” trazida do parâmetro determinado na chamada da função.