0

別のクラスの複数のコンポーネントによって生成された ActionEvent を取得することに興味があります...助けてください。以下に例を示します。

class MyFrame {
    public MyFrame() {
        JFrame window = new JFrame();
        Container c = window.getContentPane();
        c.setLayout(new BorderLayout());
        JButton btn1 = new JButton("Save");
        JButton btn2 = new JButton("Delete");
        c.add(btn1);
        c.add(btn2);
        EventHandler handler = new EventHandler();
        btn1.addActionListener(handler);
        btn2.addActionListener(handler);
        .................
    }
}
class EventHandler implements ActionListener {
    public void actionPerformed(ActionEvent ae)
    {
        // what can i do here to get Event and also recognized which component fired event?
        // I have used getSource(). but problem is not solved.
        if ( ae.getSource() == btnSave)
        {
        }
    }
}

できるだけ早く私を助けてください...

4

3 に答える 3

0

ActionEvent ここを読んで、それを処理する方法を見つけることができます。

別のクラスの複数のコンポーネントによって生成された ActionEvent を取得する

イベントハンドラーに、それがどこから来たのかを知らせたいですか?

そのためにできること

JButton temp = (JButton) ae.getSource();

提案されたように、ボタンのテキストを取得します

temp.getText();

ボタンのインスタンスがない場合は、ボタンのテキストと比較します。2つを比較した場合

于 2013-09-12T09:42:57.337 に答える
0

試す

JButton temp = (JButton) ae.getSource();
if(temp.getText().equals("Save")) {
    ...
}

もう 1 つの方法は、EventHandler パラメーター化されたコンストラクターを使用してボタン参照を渡し、その後、それをリスナーとして追加することです。

EventHandler handler = new EventHandler(btn1, btn2);
btn1.addActionListener(handler);
btn2.addActionListener(handler);

次に、EventHandler クラスを変更します。

class EventHandler implements ActionListener {
    JButton b1, b2;

    public EventHandler(JButton b1, JButton b2) {
        this.b1 = b1;
        this.b2 = b2;
    }

    public void actionPerformed(ActionEvent ae)
    {
        JButton temp = (JButton) ae.getSource();

        if(temp == b1)
        {
             ...
        }
        ...
    }
}
于 2013-09-12T09:37:43.567 に答える