【问题标题】:Add a DateTimePicker to a Button将 DateTimePicker 添加到按钮
【发布时间】:2017-09-27 14:16:06
【问题描述】:

我正在尝试实现CalendarPicker,以便当我在 JavaFX 中按下Button时它将在新窗口中打开

我为我的日历添加了一些代码:

@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,

我的按钮实际上并没有做任何事情——没有打开新窗口。我没有收到任何错误,但在 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 sn-p 吗?我猜你有fx:id="openComportButton"onAction="#dateTimePicker"。那正确吗?你到底想做什么?当用户按下按钮时,应该发生什么?
  • 糟糕,我将错误的代码复制到我的问题中。我正在尝试按下按钮打开 dateTimePicker 以便用户选择开始日期。
  • 所以我的意思是 dateTimePicker 应该在新窗口中打开。
  • 你能edit你的问题相应吗?修复 FXML,澄清你的意思。
  • &lt;Button .../&gt; 上没有 onAction 属性?

标签: java javafx datetimepicker


【解决方案1】:

假设您为 FXML 文件设置了一个控制器,并且在该控制器中定义了 dateTimePicker() 方法。

首先,您需要将按钮的操作映射到您使用按钮的onAction 属性定义的方法:

<Button id="dateTimePicker" fx:id="dateTimePicker" onAction="#dateTimePicker" layoutX="14.0" layoutY="398.0" mnemonicParsing="false" text="Start" />

处理程序方法要么需要一个与生成的事件类型匹配的参数(ActionEvent 对应于onAction),要么不需要参数。这是您在 Eclipse 中收到警告的原因。由于您不需要访问事件本身,只需定义不带参数的方法即可:

@FXML
public void dateTimePicker(){

    // ...
}

最后,如果你想显示一个新窗口,你必须创建一个新窗口。所以:

@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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2017-08-15
    • 2018-06-13
    • 2013-03-07
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多