0

Java/swing でイベントを処理するために、2 つのボタンを割り当てて同じクラスを共有するにはどうすればよいですか?

たとえば、私はこれを持っています:

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);

ここで、上記のコードで述べたように、イベント ハンドラーと同じクラスを持つことができますが、別の actionPerformed にディスパッチする別のボタンを以下のように追加したいと考えています。

        JButton moveBtn= new JButton("MOVE");
        menuPanel.add(moveBtn);
        (moveBtn).addActionListener(okButtonHandler);
4

1 に答える 1

1

再利用することはできずActionListener、アタッチするボタンに応じて別のメソッドを呼び出すことは期待できません。のコントラクトにActionListenerは、呼び出されるメソッドが 1 つあります。ただし、イベントのソースを確認し、それに基づいてフロー制御を行うことができます。次に例を示します。

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

}
于 2013-10-01T17:43:49.263 に答える