web-dev-qa-db-fra.com

Comment utiliser un écouteur d'action pour vérifier si un certain bouton a été cliqué?

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" ...

5
mbreen

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);
    }
}
21
camickr

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é".

1
duffymo

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!");
}
0
fireshadow52