Swing - 在同一个按钮上管理多个侦听器链

时间:2014-01-05 11:56:34

标签: java swing actionlistener

我有一个Swing GUI,每个按钮都有自己的监听器。之后,我添加了另一个监听器,它为一组按钮执行一个通用逻辑:在执行所选操作之前要求保存表单数据。

我做得很简单:

myButton.addActionListener(commonListener);
myButton.addActionListener(customListener);

现在的问题是,当公共侦听器中的逻辑失败时(或者当用户中止操作时),我需要阻止调用其他侦听器。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

我建议你做一些类似的事情来实现你的目标。

您可以拥有一个动作侦听器,并通过类层次结构继承公共功能,而不是拥有两个动作侦听器。

您可以拥有以下

的父类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public abstract class AbstractButtonActionListener 
                                implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        if(commonActionPerformed(e)){
            customActionPerfroemd(e);
        }
    }

    public abstract void customActionPerfromed(ActionEvent e);


    /**
     * 
     * @param e
     * @return true if the custom aciton should be performed
     */
    public boolean commonActionPerformed(ActionEvent e) {
        //method implementation
    }

}

commonActionPerformed方法将处理公共逻辑,如果流程应继续,则返回true。现在,您可以按钮添加动作侦听器,如下所示

button.addActionListener(new AbstractButtonActionListener() {

    @Override
    public void customActionPerformed(ActionEvent e) {
        //perform the custom logic here
    }
});