Ir para conteúdo
Fórum Script Brasil
  • 0

Capturar O índice Do Botão Clicado No Evento


Guest Athena

Pergunta

Olá! Será que você pode me ajudar?

Eu estou fazendo um programinha em java que possui

respostas diferentes para cada um dos botões quando clicado.

Criei na verdade um array de botões.

Agora, como eu faço para saber qual botão foi clicado pelo

usuário.

Pois criei o evento ActionPerformed(ActionEvent event) para

a ação do botão. Neste método quero capturar o índice do

botão clicado. De acordo com o índice eu terei que imprimir uma letra

no botão e então fiz: botao.setText("Clicado");

Só que esta variavel "i" do índice não está associado com o índice

do botão clicado, por isso preciso descobrir um método que capture

o valor do índice do botão clicado para eu jogar na variável "i".

Fico grata se voce puder me ajudar!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Não sei bem como é o seu projeto, mas acho melhor se fosse feito dessa forma:

Cada botão poderia pertencer a uma classe TicTacButton, por exemplo, que teria como pai a classe JButton. Nessa classe, você pode implementar a ação do botão e, depois, instanciálos.

Detalhe extra: Ela pode conter um atributo indice que indicaria em que posição do vetor o botão estar. Poderia também ter um atributo pai ou algo assim para manter o vinculo com quem o instanceou, podendo assim chamar metodos dele diretamente nas suas ações. biggrin.gif

p.s.: É pra isso que existe a herança: você adicionar metodos a classes já existentes. No caso, adicione o atributo indice e a função getIndice(). Não se esqueça do construtor new TicTacButton(String label, int indice), viu! wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Opa! E aí, humanos? tongue.gif

Olha só o que eu fiz, talvez ajude em alguma coisa:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class VariosBotoes extends JFrame implements ActionListener {
   int n = 3;
   JButton b[];

   public VariosBotoes() {
      b = new JButton[ n ];
      getContentPane().setLayout( new GridLayout( 3, 1 ) );

      for ( int i = 0; i < n; i++ ) {
         b[ i ] = new JButton( "Botão" );
         b[ i ].addActionListener( this );
         getContentPane().add( b[ i ] );
      }
  
      pack();
      setVisible( true );
   }

   public void actionPerformed( ActionEvent a ) {
      for ( int i = 0; i < n; i++ )
         if ( a.getSource() == b[ i ] )
            b[ i ].setText( "Botão " + ( i + 1 ) + " clicado" );
   }

   public static void main( String args[] ) {
      new VariosBotoes();
   }
}

Até mais! wink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Por que fazer n comparações, quando se pode fazer um algoritmo em O(1) ? huh.gif

Tipo.. cada vez que você clicar em um dos botões, ele vai checar cada um dos 9! E se fossem mais botoes... uns 900 (como no campo minado), por exemplo? Ainda seria viável?

Acho que sempre devemos pensar na perfomance e no reaproveitamento do código, mesmo que o ganho não seja muito aparente. Para criar o botão com herança é tão simples! Olha só:

class TicTacButton extends Button implements ActionListener {

   int index;
   public TicTacButton(String label, int i) {
       super(label);
       index = i;
       addActionListener(this);
   }

   public void actionPerformed(ActionEvent a) {
      setLabel("Botao " + index + " clicado!");
   }
}

A orientação a objetos taí é pra fazer cada objeto se virar e cuidar das proprias ações, ao invés do bloco main() gigantesco fazer tudo por eles! Sempre que der, é bom usar herança, classes abstratas, interfaces, afinal, elas foram criadas para fins práticos, e não para tornar o aprendizado mais dificil. tongue.gif

Link para o comentário
Compartilhar em outros sites

  • 0

Certamente, brother, afinal de que valeria uma das principais característica da linguagem (ela é totalmente orientada a objetos) se não usufruirmos de suas qualidades? biggrin.gif

Einstein já dizia: "Faça as coisas o mais simples que puder, porém não as mais simples"; eu fiz justamente o contrário. laugh.gif

Deve-se visar sempre a generalzação do código, o que implica em sua reutilização.

Valeu! wink.gif

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...