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?
Diferenciar botões
3 Respostas
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
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!
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
}
}