基于 JavaFX EventHandler<T>
,为特定操作创建侦听器非常简单。为了争论,代码看起来像这样:
btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.out.println("Hello World");
}
});
现在假设我想在这个事件上处理更复杂的事情(假设我需要 50-100 行代码)。我可以使用相同的方法并在我的处理程序中包含所有这些代码,从而在我的控制器中。
如果我想让这个看起来稍微干净一点,我可以实现这个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
?还是将所有内容都留在控制器中的最佳做法?