【问题标题】:Why is JavaFx datepicker1.setOnAction event firing whenever datepicker1.setValue( ) is complied?为什么每当遵守 datepicker1.setValue() 时 JavaFx datepicker1.setOnAction 事件就会触发?
【发布时间】:2019-11-24 16:53:16
【问题描述】:

假设我有两个日期选择器 -> date1date2。每当我选择date1 时,我想将date1 的值设置为date2 的值,以便通过使用 lambda 表达式来使用此代码

date1.setOnAction(event -> {
    date2.setValue(date1.getValue());
});

一切都像黄油一样正常,但使用这段代码

Date2.setValue(Date1.getValue())

它会自动触发 Date2 的 setOnAction 事件,而我的其他方法都疯了。有没有办法在不触发Date2 的 setOnAction 事件的情况下阻止这种或其他方式设置Date2 的值?

【问题讨论】:

    标签: java javafx lambda setvalue javafx-datepicker


    【解决方案1】:

    这是预期的行为。来自ComboBoxBase#onAction

    ComboBox 操作,每当更改 ComboBox value 属性时都会调用该操作。这可能是由于 value 属性被编程更改,当用户在弹出列表或对话框中选择项目时,或者在 editable ComboBoxes 的情况下,可能是用户提供自己的输入时(通过TextField 或其他一些输入机制。

    如果您不希望第二个DatePickeronAction 处理程序在由第一个onAction 处理程序以编程方式设置时执行任何操作,则使用布尔标志:

    import javafx.application.Application;
    import javafx.geometry.Insets;
    import javafx.geometry.Pos;
    import javafx.scene.Scene;
    import javafx.scene.control.DatePicker;
    import javafx.scene.layout.HBox;
    import javafx.stage.Stage;
    
    public class Main extends Application {
    
      private boolean setting;
    
      @Override
      public void start(Stage primaryStage) {
        var date1 = new DatePicker();
        var date2 = new DatePicker();
    
        date1.setOnAction(
            event -> {
              setting = true;
              try {
                date2.setValue(date1.getValue());
              } finally {
                setting = false;
              }
            });
    
        date2.setOnAction(
            event -> {
              if (!setting) {
                System.out.println("Second DatePicker #onAction called!");
              }
            });
    
        var root = new HBox(15, date1, date2);
        root.setAlignment(Pos.CENTER);
        root.setPadding(new Insets(30, 15, 30, 15));
    
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 2015-06-23
      • 2011-06-24
      相关资源
      最近更新 更多