Diferenciar botões

3 respostas
S

Tenho 10 Botões me minha tela cada botão tem uma imagens diferente
e todos tem o actionListener apontando para a mesma classe como eu posso diferencias cada botão nada classes controladora pra chamar a ação certa?

3 Respostas

dudaskank

Se eles possuírem ações diferentes, não tem porque usarem um actionListener pra todos…

Recomendo o uso de javax.swing.Action e AbstractAction…

Mas, caso seja realmente necessário manter esse modelo… você pode dar e ler os nomes de componentes com get/setName(), então é só dar nomes diferentes para os seus botões e no action listener verificar qual o nome do componente.

flw

Mantu

Uma maneira alternativa (Só que muito menos elegante e correta que a do dudaskank) seria vc utilizar o método getSource() da classe ActionEvent. Ele te retorna o JComponent que disparou o evento. No código abaixo dá pra ver mais ou menos como funciona:

package temp.slashJava;

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class ManyButtons extends JFrame{
	private JButton[] buttons;
	
	public ManyButtons(int btnQt) {
		super("Teste do SlashJava");
		Container panel = new JPanel();
		panel.setLayout(new GridLayout(btnQt, 1));
		
		buttons = new JButton[btnQt];
		for (int i = 0; i < buttons.length; i++) {
			buttons[i] = new JButton("Botão " + i);
			buttons[i].addActionListener(new MyListener());
			panel.add(buttons[i]);
		}
		
		JScrollPane scrl = new JScrollPane(panel);
		scrl.setSize(300, 300);
		
		getContentPane().add(scrl);
		setSize(300, 300);
		setResizable(false);
		//pack();
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		String userInput = JOptionPane.showInputDialog(
			null, 
			"Informe a quantidade de botões desejada"
		);
		if(userInput == null)
			System.exit(0);
		
		int btnQt = 10;
		try {
			btnQt = Math.abs(Integer.parseInt(userInput));
		} catch(Exception e) {
		}
		
		ManyButtons manyButtons = new ManyButtons(btnQt);
		manyButtons.show();
	}


	public class MyListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			JButton target = (JButton)e.getSource();
			JOptionPane.showMessageDialog(
				null, 
				"Vc apertou o botão " + target.getText()
			);
		}
	}

}

qq dúvida, poste mais!

brunogamacatao

Associe um action command com cada botão, daí no seu método actionPerformed você testa qual o action command correto. Ex:

//Criação dos botões
JButton adicionar = new JButton("Adicionar");
adicionar.addActionListener(listener);
adicionar.setActionCommand("adicionar");

JButton remover = new JButton("Remover");
remover.addActionListener(listener);
remover.setActionCommand("remover");

...

//Implementação do actionListener
public void actionPerformed(ActionEvent ae) {
    if (ae.getActionCommand().equals("adicionar")) {
        //Implementação da ação referente ao botão adicionar
    } else if (ae.getActionCommand().equals("remover")) {
        //Implementação da ação referente ao botão remover
    }
}
Criado 17 de julho de 2006
Ultima resposta 17 de jul. de 2006
Respostas 3
Participantes 4