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

1

一般来说,如果你有多个 JButton 你可以为每个组件设置动作命令

...
btn1.addActionListener(handler);
btn1.setActionCommand("save");
btn2.addActionListener(handler);
btn2.setActionCommand("delete");
...

在处理程序中,您可以获得操作命令

class EventHandler implements ActionListener {

    public void actionPerformed(ActionEvent ae){
        String actionCommand = ((JButton) ae.getSource()).getActionCommand();

        if (actionCommand.equals("save")) {
                ...
        }else if (actionCommand.equals("delete") {
                ...
        }
    }
}
于 2013-09-12T10:35:03.860 回答
0

您可以在ActionEvent 此处阅读以了解如何处理它。

从另一个类中获取由多个组件生成的 ActionEvent

你想让事件处理程序知道它来自哪里吗?

为此你可以做到

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

正如建议的那样,然后获取按钮文本

temp.getText();

如果您没有按钮的实例,请将其与按钮的文本进行比较。如果你只是比较两者

于 2013-09-12T09:42:57.337 回答
0

尝试

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

另一种方法是使用 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 回答