gestion des événements dans java swing


Comment puis-je affecter deux boutons pour partager la même classe pour gérer les événements en Java/swing?

Par exemple, j'ai ceci:

private class BtnEvtHandler implements ActionListener {

        private int counter=10;

        public void actionPerformed(ActionEvent e) {
            gs.setX(counter);
            gs.repaint();
            counter=counter+10;
        }

        public void actionPerformed(ActionEvent e) {

                //action for move button
        }

    }

        JButton jumpBtn= new JButton("JUMP");
        BtnEvtHandler okButtonHandler= new BtnEvtHandler(); 
        (jumpBtn).addActionListener(okButtonHandler);
        menuPanel.add(jumpBtn);

Maintenant, je veux ajouter un autre bouton comme ci-dessous qui peut avoir la même classe que le gestionnaire d'événements mais envoie à différents actionPerformed comme mentionné dans le code ci-dessus.

        JButton moveBtn= new JButton("MOVE");
        menuPanel.add(moveBtn);
        (moveBtn).addActionListener(okButtonHandler);
Author: mKorbel, 2013-10-01

1 answers

Vous ne pouvez pas réutiliser un ActionListener et s'attendre à d'appeler une méthode différente en fonction du bouton joindre. Le contrat de ActionListener a une méthode qui est appelée. Mais vous pouvez vérifier la source de l'événement et avoir un contrôle de flux basé sur cela. Voici un exemple:

package com.sandbox;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

public class SwingSandbox {

    public static void main(String[] args) throws IOException {
        JFrame frame = buildFrame();

        JPanel pane = new JPanel();

        MyActionListener myActionListener = new MyActionListener();

        JButton button1 = new JButton("Button1");
        button1.addActionListener(myActionListener);
        pane.add(button1);
        JButton button2 = new JButton("Button2");
        button2.addActionListener(myActionListener);
        pane.add(button2);


        frame.add(pane);
    }


    private static JFrame buildFrame() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setVisible(true);
        return frame;
    }


    private static class MyActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            JButton source = (JButton) e.getSource();
            if ("Button1".equals(source.getText())) {
                System.out.println("You clicked button 1");
            } else {
                System.out.println("You clicked button 2");
            }
        }
    }

}
 1
Author: Daniel Kaplan, 2013-10-01 17:51:08