首页 > 解决方案 > 我必须为我创建的每个组件创建一个单独的 ActionListener 吗?

问题描述

我目前正在学习 java.swing 和事件处理,我刚刚从一个按钮开始,它改变了标签的文本,仅此而已。我这样做的方法是创建一个 ActionListener 并将其添加到按钮组件,然后使用 ActionPerformed 方法更改标签的文本。我现在想知道更大规模的计划。您是否必须为用户可以与之交互的每个组件创建一个新的 ActionListener ?必须有更好的方法来做到这一点,它是什么?

标签: javaswing

解决方案


或者您为每个侦听器创建一次,它可以非常简洁地使用 lambdas 表达式。

或者您保留按钮的引用并使用 if/else 语句与 action.getSource 进行比较,例如:

Button x, y; //initialized somewhere
ActionListener l = new ActionListener() {
    public void onActionPerformed(ActionEvent evt) {
        if(evt.getSource() == x) {
            //Do action for x
        } else if (evt.getSource() == y) {
            //Do action for y
        }
}
x.addActionListener(l);
y.addActionListener(l);

推荐阅读