【问题标题】:JavaFx: How to update hours on the basis of difference b/w two times?JavaFx:如何根据黑白差异两次更新小时数?
【发布时间】:2017-06-12 11:11:59
【问题描述】:

我正在使用 jfoenix 库Java 8 TimeJavaFx 中开发应用程序。在我的应用程序中,我有两个 TimePicker 和一个 TextField。所有节点最初设置为 11:00,如下所示:

我想要的是 TimePickers 之间的差异,假设 Time19:00 AMTime211:00 AM,所以 差异 将是 2,所以 加 2 hoursTextField 中已经存在的值,即 11:00,因此它将变为 13:00如果用户将 Time2 更改为 10:00 AM 那么现在 差异将是 1 所以 增加 1 小时 TextField初始值11:00 (不是当前13:00的新值)12:00。请帮助我如何实现。

在我当前的代码中,问题在于它基于新值(例如,如果 13:00)而不是基于初始值(例如,11:00)更新,即当前值为 13:00 和差异是 1 所以它是 14:00 而不是 12:00 :-

import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

import com.jfoenix.controls.JFXTimePicker;

import javafx.beans.value.ChangeListener;
import javafx.fxml.FXML;
import javafx.scene.control.TextField;

public class SampleController {

    @FXML
    JFXTimePicker tp1;
    @FXML
    JFXTimePicker tp2;
    @FXML
    TextField tf1;

    public void initialize() {
        tp1.setValue(LocalTime.of(11, 00));
        tp2.setValue(LocalTime.of(11, 00));

        tf1.setText("11:00");
        tf1.setEditable(false);

        ChangeListener<Object> listener = (obs, oldValue, newValue) -> 
        update(tp1.getValue().toString(), tp2.getValue().toString(), tf1.getText(), tf1);

        tp1.valueProperty().addListener(listener);
        tp2.valueProperty().addListener(listener);

    }

    public void update (String t1, String t2, String tf, TextField textField) {
        DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm");
        LocalTime parseTime1 = LocalTime.parse(t1,format);
        LocalTime parseTime2 = LocalTime.parse(t2,format);

        long diffT1AndT2 = ChronoUnit.MINUTES.between(parseTime1, parseTime2);

        LocalTime parseTime3InTextField = LocalTime.parse(tf,format);
        LocalTime add = parseTime3InTextField.plusMinutes(diffT1AndT2);
        tf1.setText(add.toString());
    }   
}

【问题讨论】:

    标签: java javafx javafx-2 javafx-8 jfoenix


    【解决方案1】:

    一种方法是存储 tf1 文本字段的初始值,并将该初始值而不是每次更新的值传递给更新方法。

    public void initialize() {
            tp1.setValue(LocalTime.of(11, 00));
            tp2.setValue(LocalTime.of(11, 00));
    
            String tf1Text = "11:00";   // added the initial value 
            tf1.setText(tf1Text);
            tf1.setEditable(false);
    
           /*Passing the initial String here instead of the updated value */
            ChangeListener<Object> listener = (obs, oldValue, newValue) -> 
            update(tp1.getValue().toString(), tp2.getValue().toString(), tf1Text , tf1);  
    
            tp1.valueProperty().addListener(listener);
            tp2.valueProperty().addListener(listener);
    
        }
    
        public void update (String t1, String t2, String tf, TextField textField) {
            DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm");
            LocalTime parseTime1 = LocalTime.parse(t1,format);
            LocalTime parseTime2 = LocalTime.parse(t2,format);
    
            long diffT1AndT2 = ChronoUnit.MINUTES.between(parseTime1, parseTime2);
    
            LocalTime parseTime3InTextField = LocalTime.parse(tf,format);
            LocalTime add = parseTime3InTextField.plusMinutes(diffT1AndT2);
            tf1.setText(add.toString());
        }   
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-27
      • 2011-04-01
      • 1970-01-01
      • 2021-04-30
      • 2019-01-31
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多