JavaFX 8 DatePicker功能

前端之家收集整理的这篇文章主要介绍了JavaFX 8 DatePicker功能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚开始使用新的 JavaFX 8控件DatePicker.在 DatePicker User Experience Documentation中,它声称它有我想在GUI应用程序中使用的一些很酷的功能

>我想将格式从mm / dd / yyyy更改为dd / mm / yyyy.
>我想限制可以选择的日期.用户只能从今天开始选择,直到明年的同一天.
>显示除原始日期之外的Hijri日期:

如何实现这些功能? JavaDoc并没有对它们说太多.

解决方法

这是完整的实现:
  1. import java.net.URL;
  2. import java.time.LocalDate;
  3. import java.time.chrono.HijrahChronology;
  4. import java.time.format.DateTimeFormatter;
  5. import java.util.ResourceBundle;
  6. import javafx.application.Platform;
  7. import javafx.fxml.FXML;
  8. import javafx.fxml.Initializable;
  9. import javafx.scene.control.DateCell;
  10. import javafx.scene.control.DatePicker;
  11. import javafx.scene.control.Label;
  12. import javafx.scene.input.MouseEvent;
  13. import javafx.util.Callback;
  14. import javafx.util.StringConverter;
  15.  
  16. /**
  17. *
  18. * @author Fouad
  19. */
  20. public class FXMLDocumentController implements Initializable
  21. {
  22. @FXML
  23. private DatePicker dpDate;
  24.  
  25. @Override
  26. public void initialize(URL url,ResourceBundle rb)
  27. {
  28. dpDate.setValue(LocalDate.now());
  29. dpDate.setChronology(HijrahChronology.INSTANCE);
  30.  
  31. Callback<DatePicker,DateCell> dayCellFactory = dp -> new DateCell()
  32. {
  33. @Override
  34. public void updateItem(LocalDate item,boolean empty)
  35. {
  36. super.updateItem(item,empty);
  37.  
  38. if(item.isBefore(LocalDate.now()) || item.isAfter(LocalDate.now().plusYears(1)))
  39. {
  40. setStyle("-fx-background-color: #ffc0cb;");
  41. Platform.runLater(() -> setDisable(true));
  42.  
  43. /* When Hijri Dates are shown,setDisable() doesn't work. Here is a workaround */
  44. //addEventFilter(MouseEvent.MOUSE_CLICKED,e -> e.consume());
  45. }
  46. }
  47. };
  48.  
  49. StringConverter<LocalDate> converter = new StringConverter<LocalDate>()
  50. {
  51. final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
  52.  
  53. @Override
  54. public String toString(LocalDate date)
  55. {
  56. if(date != null) return dateFormatter.format(date);
  57. else return "";
  58. }
  59.  
  60. @Override
  61. public LocalDate fromString(String string)
  62. {
  63. if(string != null && !string.isEmpty())
  64. {
  65. LocalDate date = LocalDate.parse(string,dateFormatter);
  66.  
  67. if(date.isBefore(LocalDate.now()) || date.isAfter(LocalDate.now().plusYears(1)))
  68. {
  69. return dpDate.getValue();
  70. }
  71. else return date;
  72. }
  73. else return null;
  74. }
  75. };
  76.  
  77. dpDate.setDayCellFactory(dayCellFactory);
  78. dpDate.setConverter(converter);
  79. dpDate.setPromptText("dd/MM/yyyy");
  80. }
  81.  
  82. }

猜你在找的Java相关文章