gpt4 book ai didi

java - 在主 Controller 之外创建 EventHanler

转载 作者:行者123 更新时间:2023-11-30 04:32:51 25 4
gpt4 key购买 nike

基于JavaFX EventHandler<T>为特定操作创建监听器非常简单。为了便于论证,代码如下所示:

btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.out.println("Hello World");
}
});

现在假设我想在此事件上处理更复杂的事情(假设它需要 50-100 行代码)。我可以使用相同的方法并将所有这些代码放在我的处理程序中,从而放在我的 Controller 中。

如果我想让这个看起来稍微干净一点,我可以实现 EventHandler<T>界面。这看起来像这样:

public class LoginHandler implements EventHandler<ActionEvent> {

// list of parameters passed

public LoginHandler(ResourceBundle resources) {
//Resources along with other paramters I need to access
this.resources = resources;
}

@Override
public void handle(ActionEvent event) {
//...Logic goes here
System.out.println("doing my logic here - 50 to 100 lines");
((Node)(event.getSource())).getScene().getWindow().hide();
}
}

这种方法有效,但我必须将所有对象(无论是按钮、标签、文本框等)和 ResourceBundle (如果尝试国际化我的应用程序)作为参数传递。

有什么方法可以访问所有这些信息吗?基本上从 EventHandler 访问 Controller ?或者将所有内容留在 Controller 中是最佳实践吗?

最佳答案

在我看来,如果handle方法中要完成的逻辑与 View (即FXML中的控件)相关,那么它应该保留在 Controller 中。除了 Controller 之外,没有人需要知道 FXML 结构。如果要在扩展的 eventHandler 中执行通用的逻辑,除了其他参数之外,还将 Controller 实例传递给此 eventHandler。然后将与 View 相关的作业委托(delegate)给 Controller ,例如controller.updateView(params)。这些 Controller 还可以实现具有 updateView(params) 方法签名的通用接口(interface)。

关于java - 在主 Controller 之外创建 EventHanler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14218804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com