【发布时间】:2019-02-14 12:43:19
【问题描述】:
我正在使用 Javafx8,可以说我创建了许多 ui 项目(如按钮等......)。我认为将这些按钮的所有 EventHandler 放入一个单独的类中是个好主意。我的问题是:如何从 EventHandler 访问任何按钮,例如禁用它或以任何其他方式操纵它。
这是一个带有两个按钮和一个用于 EventHandlers 的单独类的最小示例
假设这是我的 Start 课程:
public class App extends Application
{
@Override
public void start(Stage primaryStage) throws Exception {
Button b1 = new Button();
b1.setOnAction(ListenerClass.createB1Event());
Button b2 = new Button();
b2.setOnAction(ListenerClass.createB2Event());
VBox vbox = new VBox(b1, b2);
Scene scene = new Scene(vbox, 200, 200);
primaryStage.setTitle("App");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main( String[] args )
{
Application.launch(args);
}
}
还有我的(单独的)监听类:
public class ListenerClass {
public static EventHandler<ActionEvent> createB1Event() {
return new EventHandler<ActionEvent>() {
public void handle(ActionEvent t) {
//Access here to b1 and b2...
//Deactivate B1
//Activate B2
}
};
}
public static EventHandler<ActionEvent> createB2Event() {
return new EventHandler<ActionEvent>() {
public void handle(ActionEvent t) {
//Access here to b1 and b2...
//Activate B1
//Dectivate B2
}
};
}
}
谢谢
【问题讨论】:
-
恐怕你想错了;这是一个可怕的想法。随着您的应用程序变得越来越复杂,这将是一场噩梦。 EventHandlers 应该与控制其场景的类保持在同一个类中......
-
在不相关的注释上,您可以考虑使用
RadioButton或ToggleButton来处理您的情况,因为您基本上想在两个选项之间切换,并且一次只允许选择一个。 -
我不完全同意这种说法,因为将事件放入控制器并将视图放入(在 javafx 情况下为 fxml 文件)有点像 MVC 的想法。这种分离并不总是很好,因为有些东西 fxml 只是普通的不支持。基本上,我不相信他有一个天生的坏主意。只是执行得不好。
-
我刚刚创建了一个带有两个按钮的简单示例。实际上,它是一个拥有超过 30 个按钮和所有其他东西的应用程序。这意味着,我在同一个类中拥有所有 Eventhandler 实现。这个班级像地狱一样长大。这就是为什么我想创建一个单独的类。但是后来我遇到了访问这些对象的问题。我可以问不同的问题:对于这些情况,什么是“最佳实践”:使用严格的 MVC 模式或将所有事件处理程序放在一个类中?
标签: java javafx eventhandler