J'ai 4 listes de boutons disposés dans une colonne de mon programme. A partir de maintenant, j'ai 4 boucles qui vérifient si un bouton a été cliqué ou non. Existe-t-il un moyen simple de vérifier si un bouton a été cliqué au lieu de parcourir chaque liste en boucle pour voir si ce bouton a été cliqué? Il doit y avoir un moyen plus facile de vérifier si "actionSource == anybutton" ...
Utilisez des classes internes anonymes pour chaque bouton:
JButton button = new JButton("Do Something");
button.addActionListener( new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("Do Something Clicked");
}
});
Ou si votre logique est liée, vous pouvez alors partager un auditeur:
import Java.awt.*;
import Java.awt.event.*;
import javax.swing.*;
public class ButtonCalculator extends JFrame implements ActionListener
{
private JButton[] buttons;
private JTextField display;
public ButtonCalculator()
{
display = new JTextField();
display.setEditable( false );
display.setHorizontalAlignment(JTextField.RIGHT);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout( new GridLayout(0, 5) );
buttons = new JButton[10];
for (int i = 0; i < buttons.length; i++)
{
String text = String.valueOf(i);
JButton button = new JButton( text );
button.addActionListener( this );
button.setMnemonic( text.charAt(0) );
buttons[i] = button;
buttonPanel.add( button );
}
getContentPane().add(display, BorderLayout.NORTH);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
setResizable( false );
}
public void actionPerformed(ActionEvent e)
{
JButton source = (JButton)e.getSource();
display.replaceSelection( source.getActionCommand() );
}
public static void main(String[] args)
{
UIManager.put("Button.margin", new Insets(10, 10, 10, 10) );
ButtonCalculator frame = new ButtonCalculator();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}
Vous pouvez ajouter un auditeur individuel pour chaque bouton et un auditeur commun à chaque bouton. Programmez l'auditeur commun pour répondre à "n'importe quel bouton enfoncé".
Chaque fois que vous cliquez sur un bouton, la méthode actionPerformed
est déclenchée, quel que soit le bouton sur lequel vous avez appuyé.
public void actionPerformed(ActionEvent event) {
Object source = event.getSource();
if (source instanceof JButton) System.out.println("You clicked a button!");
}