2014-04-08 32 views
5

Yeni JavaFX 8 denetimi DatePicker'u kullanmaya başladım. Ben dd/mm/yyyy için mm/dd/yyyy gelen biçimini değiştirmek istiyorumJavaFX 8 DatePicker özellikleri

  1. : DatePicker User Experience Documentation olarak, o benim GUI uygulamasında istiyorum hoş özellikleri çift olduğu belirtilmektedir.
  2. Seçebileceğiniz tarihi kısıtlamak istiyorum. Kullanıcı sadece bugünden gelecek yılın aynı gününe kadar seçim yapabilir. Orijinal olanlar dışında
  3. Ekran Hicri tarihleri:

enter image description here

Nasıl bu özellikleri uygulamak için? JavaDoc onlar hakkında çok şey söylemiyor.

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 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"); 
    } 

} 
: Burada

cevap

8

tam uygulamasıdır