Mais de um botão

4 respostas
tluisrs

Olá pessoal,

Estou iniciando meus estudos sobre interfaces. Comecei com o pacote Swing e já surgiu uma dúvida.

Quando eu quero definir um evento eu devo implementar a Interface ActionListener certo ? Pois é, ai nessa interface tem somente o método ActionPerfomed (acho que é isso). Eu tenho que definir todos os eventos dentro dele ?

Pra ser mais claro minha dúvida é: se eu tiver mais de um botão no frame, por exemplo, como sei em qual eu cliquei ?

Desde já agradeço

4 Respostas

P

você pode em cada botao definir o actionCommand, e no método que trata o evento, verificar por if_else ou switch o actionCommand

ramilani12

Vc pode verificar dessa maneira:

public void actionPerformed (ActionEvent ae) 
	{
		
		
		if (ae.getSource() instanceof JButton )
		{	
			if ((JButton) ae.getSource() == button)
			
                        if ((JButton) ae.getSource() == button1)
               }
               if (ae.getSource() instanceof JMenu)
               {
                              if ((JMenu) ae.getSource() == menu1)
                }

O metodo getSource() retorne um Object vc precisa quem disparou um evento foi em JButton ou JMenu , JMenuItem e assim por diante

tluisrs

Cara, valeu mesmo, eu entendi. Só gostaria de saber se esse método não é um pouco demorado demais, pois tem que testar todos os possíveis eventos. Tem algum outro ou é assim que é feito ?

Desde já agradeço

fenrir

Existe outra forma, que é definir o evento para cada botão.

JButton button1 = new JButton("botão 1");
button1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do something
    }
});
JButton button2 = new JButton("botão 2");
button2.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do something
    }
});

Só que isso deixa a classe cheia de código repetido e com as ações sendo tratadas em lugares diferentes. Melhor deixar tudo centralizado.

Quanto à demora…você realmente acha que analisar o evento vai demorar mais tempo do que aquele que o usuário leva para clicar no mouse e soltar o botão? :wink:

Se você soubesse o que acontece quando você clica num botão em qualquer programa por aí, ficaria impressionado em quão rápido essas coisas podem acontecer…é só pensar que existe o processamento para saber que o mouse está sobre um botão, que o botão do mouse foi pressionado, quantas vezes foi pressionado, atualizar a GUI (para indicar que o botão na tela foi efetivamente pressionado), disparar diversos eventos para diversos lugares…e por aí vai!!

Criado 29 de maio de 2007
Ultima resposta 29 de mai. de 2007
Respostas 4
Participantes 4