我正在使用Javafx8,可以说我创建了许多ui项目(例如按钮等)。我认为将这些按钮的所有EventHandler放入单独的类中是一个好主意。我的问题是:如何从EventHandler访问任何按钮,例如使其死亡或以任何其他方式对其进行操纵。
这是带有两个按钮和EventHandlers单独类的最小示例
让我们说这是我的Start课:
ComponentToPrint
和我的(单独的)侦听器类:
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);
}
}
谢谢
答案 0 :(得分:1)
所以根据您的校长。您希望禁用位于vbox中并被按下的按钮,并启用该vbox中的所有其他按钮。 而你的问题是如何找到被按下的按钮。
您需要使用ActionEvent.getSource()方法。
这里是我的编码方式。...
这是开始课程:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
VBox vbox = new VBox();
Button b1 = addNewButton("Button1",vbox);
Button b2 = addNewButton("Button2",vbox);
Button b3 = addNewButton("Button3",vbox);
Scene scene = new Scene(vbox, 200, 200);
primaryStage.setTitle("App");
primaryStage.setScene(scene);
primaryStage.show();
}
public static Button addNewButton(String label, VBox ownerVBox){
Button button = new Button(label);
ownerVBox.getChildren().add(button);
button.setOnAction(ListenerClass.createBEvent());
return button;
}
public static void main(String[] args) {
launch(args);
}
}
监听器类:
public class ListenerClass {
public static EventHandler<ActionEvent> createBEvent() {
return new EventHandler<ActionEvent>() {
public void handle(ActionEvent t) {
Button b = (Button) t.getSource();
VBox vbox =(VBox) b.getParent();
vbox.getChildren().forEach(button-> {
button.setDisable(false);
});
b.setDisable(true);
}
};
}
}