2016-06-02 1 views
0

DatepickervaluePropertytextPropertyLabelにバインドしようとしています。 日付が選択され、Label "db"に格納されている場合、エラーはないと解析されます。空のDatepickerフィールドのバインド

しかし、ラベルデシベルが空の場合、それはエラーを与える:

java.time.format.DateTimeParseException: Text '' could not be parsed at index 0

私はラベル「DB」は、空または値である場合は、両方のケースで日付を解析できるようにしたいです。

ここに私が解析するために使用する更新されたコードがあります。

tableviewController

tableview.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Employee>(){ 
FXMLLoader loader=new FXMLLoader(getClass().getResource("view.fxml")); 
try{ 
    Parent newParent=loader.load(); 
    viewController sunController=loader.getController(); 
subController.textToDisplay.set(newValue.getDateOfBirth()); 

Stage stage =new Stage(); 
Scene scene =new Scene(newParent); 
stage.setScene(scene); 

のViewController

@FXML private Label db; 
public SimpleStringProperty textToDisplay=new SimpleStringProperty(""); 

private static final DateTimeFormatter DATE_FORMATTER=DateTimeFormatter.ofPattern(dd/MM/yyyy); 

public void update()throws IOeXCEPTION{ 
    FXMLLoader loader=new FXMLLoader(getClass().getResource("update.fxml")); 
try{ 
    Parent newParent=loader.load(); 
    updateController sunController=loader.getController(); 
    subController.textToDisplay.set(LocalDate.parse(db.getText(), DATE_FORMATTER)); 

Stage stage =new Stage(); 
Scene scene =new Scene(newParent); 
stage.setScene(scene); 
} 
@Override 
public void initialize(URL location,ResourceBundle resources){ 
db.textProperty().bindBidirectional(textToDisplay); 
} 
} 

updatebController.java

@FXML private DatePicker dateOfBirth; 

public SimplObjectProperty<LocalDate>textToDisplay=new SimpleObjectProperty<>(); 

@Override 
public void initialize(URL location,ResourceBundle resources){ 
dateOfBirth.valueProperty().bindBidirectional(textToDisplay); 

} 
} 
私はラベルのDBが空の場合でも、日付を解析できるようにしたい

のみ上記のコードLable dbに値がある場合に機能します。 Plsヘルプ。日付ピッカーとラベルの間の結合を、あなたは内蔵のLocalDateStringConverterを使用する可能性があるため

+0

私はJavaFXのを知らないので、私はこの意志を言うことができません十分なはずですが、解析を試みる前に 'db.getText()'の内容をテストするのがよいでしょう。 '!db.getText()。isEmpty()'の場合にのみ、ディスプレイの 'set'メソッドを呼び出します。 – Aaron

+0

@Aaronありがとうございます。 – Helen

答えて

0

Bindings.bindBidirectional(label.textProperty(), datePicker.valueProperty(), new LocalDateStringConverter()); 

日付ピッカーが空になると、ラベルも空になり、例外がスローされることはありません、継続使用を可能に

注:日付ピッカーは、あなたの代わりにこの行を置き換えることができ、中間の性質「textToDisplayを」必要はありませんこれで

を集中失うまでラベルが空の文字列に更新されません。

subController.textToDisplay.set(newValue.getDateOfBirth()); 

:上記返しますLOCALDATE


を想定し

datePicker.setValue(newValue.getDateOfBirth()); 

ここでは簡単な例です:

@Override 
public void start(Stage primaryStage) throws Exception{ 
    DatePicker datePicker = new DatePicker(); 
    Label label = new Label(); 
    Bindings.bindBidirectional(label.textProperty(), datePicker.valueProperty(), new LocalDateStringConverter()); 
    Button today = new Button("Set today's date"); 
    today.setOnAction(event-> datePicker.setValue(LocalDate.now())); 
    Button clear = new Button("Clear date"); 
    clear.setOnAction(event-> datePicker.setValue(null)); 

    VBox root = new VBox(5, datePicker, 
      new HBox(5, new Label("Date of Birth: "), label), 
      new HBox(5, today, clear)); 
    root.setAlignment(Pos.CENTER); 
    root.setFillWidth(false); 
    Scene scene = new Scene(root, 400, 100); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
関連する問題