2016-04-03 90 views

回答

2

有你需要做兩件事情:

  1. 否決的變化,如果用戶更改文本字段中的日期是不是一個星期一的日期。您可以使用DatePickerconverter property
  2. 禁用彈出窗口中不是星期一的所有單元格。你可以用dayCellFactory來做到這一點。

簡單的例子:

import java.time.DayOfWeek; 
import java.time.LocalDate; 

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.DateCell; 
import javafx.scene.control.DatePicker; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 
import javafx.util.Callback; 
import javafx.util.StringConverter; 

public class DatePickerMondaysOnly extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     DatePicker datePicker = new DatePicker(); 

     StringConverter<LocalDate> defaultConverter = datePicker.getConverter(); 

     datePicker.setConverter(new StringConverter<LocalDate>() { 

      @Override 
      public String toString(LocalDate object) { 
       return defaultConverter.toString(object); 
      } 

      @Override 
      public LocalDate fromString(String string) { 
       LocalDate date = defaultConverter.fromString(string); 
       if (date.getDayOfWeek() == DayOfWeek.MONDAY) { 
        return date ; 
       } else { 
        // not a Monday. Revert to previous value. 
        // You could also, e.g., return the closest Monday here. 
        return datePicker.getValue(); 
       } 
      } 

     }); 

     datePicker.setDayCellFactory(dp -> new DateCell() { 
      @Override 
      public void updateItem(LocalDate item, boolean empty) { 
       super.updateItem(item, empty); 
       setDisable(empty || item.getDayOfWeek() != DayOfWeek.MONDAY);    
      } 
     }); 

     // Just for debugging: make sure we only see Mondays: 
     datePicker.valueProperty().addListener((obs, oldDate, newDate) -> { 
      if (newDate.getDayOfWeek() != DayOfWeek.MONDAY) { 
       System.out.println("WARNING: date chosen was not a Monday"); 
      } 
      System.out.println(newDate + " (" + newDate.getDayOfWeek()+")"); 
     }); 

     StackPane root = new StackPane(datePicker); 
     root.setPadding(new Insets(20)); 
     primaryStage.setScene(new Scene(root)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

這真的幫助和解決我的問題,非常感謝你! –

相關問題