【问题标题】:Define action listener in custom button class在自定义按钮类中定义动作监听器
【发布时间】:2016-07-14 14:09:01
【问题描述】:

我正在使用 javafx 为我的程序创建一个 GUI,并创建了一个自定义按钮 ComponentButton。这扩展了javafx.scene.control.Button,到目前为止唯一真正的区别是按钮有一个额外的成员变量。我希望我的按钮的所有实例都附加一个动作侦听器,侦听器将使用成员变量。因此,我希望能够在按钮的类定义中定义动作监听器。到目前为止,我还无法完成这项工作,我可以为按钮的每个实例创建一个动作侦听器,但由于其中有很多,我宁愿避免这样做。

非常感谢任何想法或替代方法,在此先感谢。

编辑:已回答

我决定让视图(使用按钮的地方)实现EventHandler<ActionEvent>。这意味着我可以添加方法

@Override
public void handle(final ActionEvent event)
{
    //Do stuff
}

这意味着我可以调用button.setOnAction(this); 来执行操作

【问题讨论】:

  • “我可以为按钮的每个实例创建一个动作侦听器,但由于会有很多,我宁愿避免它”。为什么要避免它?并且“到目前为止,我还无法完成这项工作”并不是对问题的陈述。究竟出了什么问题?
  • 肯定是this.setOnAction(this);,而不是button.setOnAction(this);?
  • 我在 UI 类中使用它,根据需要循环创建按钮

标签: java javafx javafx-8


【解决方案1】:

我决定让视图(使用按钮的地方)实现EventHandler<ActionEvent>。这意味着我可以添加方法

@Override
public void handle(final ActionEvent event)
{
    //Do stuff
}

这意味着我可以调用button.setOnAction(this); 来执行操作

【讨论】:

  • 考虑改为button.setOnAction(this::handle);,并且不实现EventHandler<ActionEvent> 接口(同时删除@Override 注释)。这样做更可取的原因是,如果您需要对其他听众做同样的事情,您现在可以:使用您的原始解决方案,您不能同时实现EventHandler<ActionEvent> 和(例如)EventHandler<MouseEvent>。您还可以使用此方法将方法重命名为您喜欢的任何名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
相关资源
最近更新 更多