JavaFX 8 日期选择器功能
Posted
技术标签:
【中文标题】JavaFX 8 日期选择器功能【英文标题】:JavaFX 8 DatePicker features 【发布时间】:2014-05-21 08:18:20 【问题描述】:我刚开始使用新的 JavaFX 8 控件DatePicker
。在DatePicker User Experience Documentation 中,据说它有几个我想在我的 GUI 应用程序中拥有的很酷的功能:
-
我想将格式从
mm/dd/yyyy
更改为dd/mm/yyyy
。
我想限制可以选择的日期。用户只能选择从今天到明年同一天。
除原始日期外显示回历日期:
如何实现这些功能? JavaDoc 对它们没有多说。
【问题讨论】:
【参考方案1】:这是完整的实现:
import java.net.URL;
import java.time.LocalDate;
import java.time.chrono.HijrahChronology;
import java.time.format.DateTimeFormatter;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.util.Callback;
import javafx.util.StringConverter;
/**
*
* @author Fouad
*/
public class FXMLDocumentController implements Initializable
@FXML
private DatePicker dpDate;
@Override
public void initialize(URL url, ResourceBundle rb)
dpDate.setValue(LocalDate.now());
dpDate.setChronology(HijrahChronology.INSTANCE);
Callback<DatePicker, DateCell> dayCellFactory = dp -> new DateCell()
@Override
public void updateItem(LocalDate item, boolean empty)
super.updateItem(item, empty);
if(item.isBefore(LocalDate.now()) || item.isAfter(LocalDate.now().plusYears(1)))
setStyle("-fx-background-color: #ffc0cb;");
Platform.runLater(() -> setDisable(true));
/* When Hijri Dates are shown, setDisable() doesn't work. Here is a workaround */
//addEventFilter(MouseEvent.MOUSE_CLICKED, e -> e.consume());
;
StringConverter<LocalDate> converter = new StringConverter<LocalDate>()
final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
@Override
public String toString(LocalDate date)
if(date != null) return dateFormatter.format(date);
else return "";
@Override
public LocalDate fromString(String string)
if(string != null && !string.isEmpty())
LocalDate date = LocalDate.parse(string, dateFormatter);
if(date.isBefore(LocalDate.now()) || date.isAfter(LocalDate.now().plusYears(1)))
return dpDate.getValue();
else return date;
else return null;
;
dpDate.setDayCellFactory(dayCellFactory);
dpDate.setConverter(converter);
dpDate.setPromptText("dd/MM/yyyy");
【讨论】:
我正在获取回历日历 - 但看到 1 天的不匹配...我该如何纠正它?我尝试更改时区,但没有更改它..请帮助 @AbdealiChandanwala 您可以通过提供自定义 Hijrah 变体来解决这个问题。你运行什么java版本? 请指导我如何实现这一点 - 因为我过去几个小时尝试检查它,但没有找到任何适合我的方法。感谢您的帮助 - 我是 java 8 并且没有 joda 时间 @AbdealiChandanwala 看看这个路径:C:\Program Files\Java\jdk1.8.0_162\jre\lib\hijrah-config-umalqura.properties 你可以手动更新它,否则你可以在运行时通过反射注入它(提出一个新问题,我会提供答案)。 谢谢 - 我试过你的链接,但后来我不得不发布一个新问题***.com/questions/51016469/…以上是关于JavaFX 8 日期选择器功能的主要内容,如果未能解决你的问题,请参考以下文章