Qual a melhor maneira de obter o evento de um botão em um ActionListener?

2 respostas
vitorkgb

Estou tento um problema aqui, tenho o método ActionListener em uma classe de controle, ela recebe o evento de 3 Classes diferentes, sendo que tenho que colocar assim

if(e.getActionCommand().equals("Gerar"))

o que não é uma boa prática, pegar o que está escrito no botão, pois posso ter o mesmo nome escrito em vários botões

se eu tentar colocar assim

if(e.getSource() == principal.getjBotaoGerar())

dá o erro NullPointerException, quando passa em um botão que não está sendo o chamado o evento

Segue a classe com as partes relevantes abaixo, se eu clicar no botão da telaSetor, ele já quando tenta lê o if(e.getSource() == principal.getjBotaoGerar()), não posso iniciarlizar as classes logo de começo da classe GeradorRelatorio, só passar pelo construtor, existe alguma coisa que possa colocar no método ActionListener???

public class GeradorRelatorio implements ActionListener
{
    Principal principal;
    TelaIndividual telaIndividual;
    TelaSetor telaSetor;

    public GeradorRelatorio(Principal p)
    {
        principal = p;
    }

    public GeradorRelatorio(TelaIndividual ti)
    {
        telaIndividual = ti;
    }

    public GeradorRelatorio(TelaSetor ts)
    {
        telaSetor = ts;
    }

    public void actionPerformed(ActionEvent e)
    {

        if(e.getSource() == principal.getjBotaoGerar())
      {
         //código aqui
      }

      if(e.getSource() == telaSetor.getjBotaoExportarSetor())
      {
         //código aqui
      }

      if(e.getSource() == telaIndividual.getjBotaoExportar())
      {
         //código aqui
      }
    }
}

nas outras classes estão assim

jBotaoGerar.addActionListener(new GeradorRelatorio(this));
jBotaoExportarSetor().addActionListener(new GeradorRelatorio(this));
jBotaoExportar.addActionListener(new GeradorRelatorio(this));

2 Respostas

laudenpower

Não seria melhor você colocar uma classe de evento para cada tela? Pois dessa forma você terá que verificar se a janela é diferente de null para poder acessar o botão…
Sem falar que ao criar uma classe de evento para cada janela você separa melhor o código, tendo o código de manipulação de cada tela em um arquivo separado.

Francisco_Silva

Exatamente como laudenpower disse.

Se fosse para registra a escuta do evento em apenas um componente tudo bem, mas quando se trata de mais de um, o melhor é implementar classes internas ou anônimas para cada componente…

Criado 23 de janeiro de 2011
Ultima resposta 24 de jan. de 2011
Respostas 2
Participantes 3