【发布时间】:2017-06-12 11:11:59
【问题描述】:
我正在使用 jfoenix 库 和 Java 8 Time 在 JavaFx 中开发应用程序。在我的应用程序中,我有两个 TimePicker 和一个 TextField。所有节点最初设置为 11:00,如下所示:
我想要的是 TimePickers 之间的差异,假设 Time1 是 9:00 AM 和 Time2 是 11:00 AM,所以 差异 将是 2,所以 加 2 hours 到 TextField 中已经存在的值,即 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