JavaFx:如何根据两次b/w的差异更新小时数?

JavaFx:如何根据两次b/w的差异更新小时数?,java,javafx,javafx-2,javafx-8,jfoenix,Java,Javafx,Javafx 2,Javafx 8,Jfoenix,我正在JavaFx中开发一个应用程序,其中我正在使用jfoenix库和java8 Time。在我的应用程序中,我有两个计时器和一个文本字段。所有节点最初设置为11:00,如下所示: 我想要的是时间选择器之间的差异,假设时间1是上午9:00和时间2是上午11:00,那么差异将是2,因此,在文本字段中已经存在的值(即11:00)上加上2小时,因此,它将变为13:00,如果用户将时间2更改为10:00 AM,那么现在差异将为1so在文本字段的初始值中添加1小时(而不是当前13:00的新值)并定在12

我正在JavaFx中开发一个应用程序,其中我正在使用jfoenix库和java8 Time。在我的应用程序中,我有两个计时器和一个文本字段。所有节点最初设置为11:00,如下所示:

我想要的是时间选择器之间的差异,假设时间1上午9:00时间2上午11:00,那么差异将是2,因此,文本字段中已经存在的值(即11:00)上加上2小时,因此,它将变为13:00,如果用户将时间2更改为10:00 AM,那么现在差异将为1so文本字段初始值中添加1小时(而不是当前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());
    }   
}
import java.time.LocalTime;
导入java.time.format.DateTimeFormatter;
导入java.time.temporal.ChronoUnit;
导入com.jfoenix.controls.JFXTimePicker;
导入javafx.beans.value.ChangeListener;
导入javafx.fxml.fxml;
导入javafx.scene.control.TextField;
公共类采样控制器{
@FXML
JFXTimePicker tp1;
@FXML
JFXTimePicker tp2;
@FXML
文本字段tf1;
公共无效初始化(){
tp1.setValue(LocalTime.of(11,00));
tp2.setValue(LocalTime.of(11,00));
tf1.setText(“11:00”);
tf1.setEditable(false);
ChangeListener侦听器=(obs、旧值、新值)->
更新(tp1.getValue().toString(),tp2.getValue().toString(),tf1.getText(),tf1);
tp1.valueProperty().addListener(listener);
tp2.valueProperty().addListener(listener);
}
公共无效更新(字符串t1、字符串t2、字符串tf、文本字段){
DateTimeFormatter format=模式的DateTimeFormatter.of(“HH:mm”);
LocalTime parseTime1=LocalTime.parse(t1,格式);
LocalTime parseTime2=LocalTime.parse(t2,格式);
long difft1和t2=计时单位。分钟。介于(parseTime1和parseTime2)之间;
LocalTime parseTime3InTextField=LocalTime.parse(tf,格式);
LocalTime add=parseTime3InTextField.plusMinutes(difft1和t2);
tf1.setText(add.toString());
}   
}

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

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());
    }   
}
public void initialize(){
tp1.setValue(LocalTime.of(11,00));
tp2.setValue(LocalTime.of(11,00));
字符串tf1Text=“11:00”;//添加了初始值
tf1.setText(tf1Text);
tf1.setEditable(false);
/*在此处传递初始字符串而不是更新的值*/
ChangeListener侦听器=(obs、旧值、新值)->
更新(tp1.getValue().toString(),tp2.getValue().toString(),tf1Text,tf1);
tp1.valueProperty().addListener(listener);
tp2.valueProperty().addListener(listener);
}
公共无效更新(字符串t1、字符串t2、字符串tf、文本字段){
DateTimeFormatter format=模式的DateTimeFormatter.of(“HH:mm”);
LocalTime parseTime1=LocalTime.parse(t1,格式);
LocalTime parseTime2=LocalTime.parse(t2,格式);
long difft1和t2=计时单位。分钟。介于(parseTime1和parseTime2)之间;
LocalTime parseTime3InTextField=LocalTime.parse(tf,格式);
LocalTime add=parseTime3InTextField.plusMinutes(difft1和t2);
tf1.setText(add.toString());
}   
}