2017-06-12 20 views
0

我正在開發應用程序JavaFx其中我正在使用jfoenix庫Java 8時間。在我的應用程序中,我有兩個TimePickers和一個TextField。所有節點最初設置爲11:00這樣的:JavaFx:如何根據差異b/w兩次更新小時?

enter image description here

我要的是什麼的TimePickers之間的差異,讓說,如果時間19:00 AM and Time2 is 11:00 AM,所以區別將是,所以添加2小時到這是在的TextField11:00已經存在的值,所以它會成爲13:00並且如果用戶改變時間210:上午12時所以現在差將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()); 
    } 
} 

回答

0

一種方式將存儲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()); 
    } 
}