2015-08-18 2 views
0

Я хочу ввести пользовательский формат DatePicker в Javafx8. Если я вхожу, например. "21,2,15" по textinput Я хочу, чтобы сборщик дат установил localdate до 21 февраля 2015 года. Я мог бы разделить строку на три части и просто добавить три INT в новую локальную дату, но как я могу получить доступ к моему входному тексту до/во время входа? Вторая возможность: поймать запятую (,) и мгновенно преобразовать ее в точку (.), Поэтому, набрав «21,2,15», она преобразуется в «21.2.15» и в этом формате после нажатия ввода добавляет DatePicker 2015-02-21 как местная дата. Итак, любой шанс ввести дату с помощью «d, m, yy»?Пользовательский ввод текста ввода даты запятой

+0

На TextField, это будет работать, но я использую DatePicker. Спасибо в любом случае – Simsala

ответ

1

Укажите converter для DatePicker и используйте подходящий DateTimeFormatter, чтобы разобрать и отформатировать дату.

SSCEE:

import java.time.LocalDate; 
import java.time.format.DateTimeFormatter; 

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

public class DatePickerWithCustomFormat extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     DatePicker datePicker = new DatePicker(); 

     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d,M,y"); 
     datePicker.setConverter(new StringConverter<LocalDate>() { 

      @Override 
      public String toString(LocalDate date) { 
       if (date == null) { 
        return "" ; 
       } 
       return formatter.format(date); 
      } 

      @Override 
      public LocalDate fromString(String string) { 
       if (string == null || string.isEmpty()) { 
        return null ; 
       } 
       return LocalDate.from(formatter.parse(string)); 
      } 

     }); 

     datePicker.valueProperty().addListener((obs, oldDate, newDate) -> 
      System.out.println("Selected "+newDate)); 

     primaryStage.setScene(new Scene(new StackPane(datePicker), 375, 120)); 
     primaryStage.show(); 
    } 

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

спасибо, друг. Вхождение этого шаблона работает как шарм. Теперь Picker должен показывать LocalDate с точками после ввода с запятой. поэтому (набрав 30,12,13) ​​-> (нажмите enter) -> (localdate - 2013-12-30-работает, спасибо -) -> (datepicker должен ПОКАЗАТЬ 30.12.13). Было бы идеально, если бы я мог набирать 30.12.13 или 30,12,13, и в обоих случаях localdate будет на 2013-12-30, а текст, показанный в DatePicker, будет 30.12.13. Вы понимаете, что я имею в виду? – Simsala