将 DateTimePicker 添加到按钮
Add a DateTimePicker to a Button
我正在尝试实现一个 CalendarPicker
,这样当我在 JavaFX
中按下 Button
时,它将在一个新的 window 中打开
我已经为我的日历添加了一些代码:
@FXML
public void dateTimePicker(Stage primaryStage){
CalendarPicker dateTime = new CalendarPicker();
dateTime.withCalendar(Calendar.getInstance());
dateTime.withShowTime(Boolean.TRUE);
dateTime.withLocale(Locale.ENGLISH);
dateTime.calendarProperty().addListener(new ChangeListener<Calendar>() {
public void changed(ObservableValue<? extends Calendar> ov, Calendar t, Calendar t1) {
System.out.println("Selected date: "+t1.getTime().toString());
}
});
StackPane root = new StackPane();
root.getChildren().add(dateTime);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Date & Time from JFXtras 2.2");
primaryStage.setScene(scene);
primaryStage.show();
}
然后在我的 FXML 中添加了一个按钮
<Button id="dateTimePicker" fx:id="dateTimePicker" layoutX="14.0" layoutY="398.0" mnemonicParsing="false" text="Start" />
并最终初始化了我的 Button
@FXML
private Button dateTimePicker,
我的按钮实际上没有做任何事情 - 没有新的 windows 打开。我没有收到任何错误,但我在 Eclipse 中收到警告
Parameter 'primaryStage' is not assignable to javafx.event.Event
我做错了什么?
编辑
向按钮添加 onAction
属性已停止我的应用程序 运行。错误是:
Error resolving onAction='#dateTimePicker', either the event handler is not in the Namespace or there is an error in the script.
假设您为 FXML 文件设置了控制器,并且在该控制器中定义了 dateTimePicker()
方法。
首先,您需要将按钮的操作映射到您使用按钮的 onAction
属性 定义的方法:
<Button id="dateTimePicker" fx:id="dateTimePicker" onAction="#dateTimePicker" layoutX="14.0" layoutY="398.0" mnemonicParsing="false" text="Start" />
处理程序方法要么需要采用与生成的事件类型相匹配的参数(ActionEvent
for onAction
),要么不需要参数。这是您在 Eclipse 中收到警告的原因。由于您不需要访问事件本身,只需定义不带参数的方法:
@FXML
public void dateTimePicker(){
// ...
}
最后,如果你想显示一个新的window,你必须创建一个新的window。所以:
@FXML
public void dateTimePicker(){
CalendarPicker dateTime = new CalendarPicker();
dateTime.withCalendar(Calendar.getInstance());
dateTime.withShowTime(Boolean.TRUE);
dateTime.withLocale(Locale.ENGLISH);
dateTime.calendarProperty().addListener(new ChangeListener<Calendar>() {
public void changed(ObservableValue<? extends Calendar> ov, Calendar t, Calendar t1) {
System.out.println("Selected date: "+t1.getTime().toString());
}
});
StackPane root = new StackPane();
root.getChildren().add(dateTime);
Scene scene = new Scene(root, 300, 250);
Stage stage = new Stage();
stage.setTitle("Date & Time from JFXtras 2.2");
stage.setScene(scene);
stage.show();
}
我正在尝试实现一个 CalendarPicker
,这样当我在 JavaFX
Button
时,它将在一个新的 window 中打开
我已经为我的日历添加了一些代码:
@FXML
public void dateTimePicker(Stage primaryStage){
CalendarPicker dateTime = new CalendarPicker();
dateTime.withCalendar(Calendar.getInstance());
dateTime.withShowTime(Boolean.TRUE);
dateTime.withLocale(Locale.ENGLISH);
dateTime.calendarProperty().addListener(new ChangeListener<Calendar>() {
public void changed(ObservableValue<? extends Calendar> ov, Calendar t, Calendar t1) {
System.out.println("Selected date: "+t1.getTime().toString());
}
});
StackPane root = new StackPane();
root.getChildren().add(dateTime);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Date & Time from JFXtras 2.2");
primaryStage.setScene(scene);
primaryStage.show();
}
然后在我的 FXML 中添加了一个按钮
<Button id="dateTimePicker" fx:id="dateTimePicker" layoutX="14.0" layoutY="398.0" mnemonicParsing="false" text="Start" />
并最终初始化了我的 Button
@FXML
private Button dateTimePicker,
我的按钮实际上没有做任何事情 - 没有新的 windows 打开。我没有收到任何错误,但我在 Eclipse 中收到警告
Parameter 'primaryStage' is not assignable to javafx.event.Event
我做错了什么?
编辑
向按钮添加 onAction
属性已停止我的应用程序 运行。错误是:
Error resolving onAction='#dateTimePicker', either the event handler is not in the Namespace or there is an error in the script.
假设您为 FXML 文件设置了控制器,并且在该控制器中定义了 dateTimePicker()
方法。
首先,您需要将按钮的操作映射到您使用按钮的 onAction
属性 定义的方法:
<Button id="dateTimePicker" fx:id="dateTimePicker" onAction="#dateTimePicker" layoutX="14.0" layoutY="398.0" mnemonicParsing="false" text="Start" />
处理程序方法要么需要采用与生成的事件类型相匹配的参数(ActionEvent
for onAction
),要么不需要参数。这是您在 Eclipse 中收到警告的原因。由于您不需要访问事件本身,只需定义不带参数的方法:
@FXML
public void dateTimePicker(){
// ...
}
最后,如果你想显示一个新的window,你必须创建一个新的window。所以:
@FXML
public void dateTimePicker(){
CalendarPicker dateTime = new CalendarPicker();
dateTime.withCalendar(Calendar.getInstance());
dateTime.withShowTime(Boolean.TRUE);
dateTime.withLocale(Locale.ENGLISH);
dateTime.calendarProperty().addListener(new ChangeListener<Calendar>() {
public void changed(ObservableValue<? extends Calendar> ov, Calendar t, Calendar t1) {
System.out.println("Selected date: "+t1.getTime().toString());
}
});
StackPane root = new StackPane();
root.getChildren().add(dateTime);
Scene scene = new Scene(root, 300, 250);
Stage stage = new Stage();
stage.setTitle("Date & Time from JFXtras 2.2");
stage.setScene(scene);
stage.show();
}