2016-07-25 23 views
0

JavaFX-8日付ピッカーを使用するサンプルアプリケーションを作成しました。デフォルトパターンではうまく動作しますが、特定のパターンでは例外がスローされます。私はデフォルトで 'DD-MM-YYYY'パターンに変換しようとしています。JavaFX日付ピッカー固有のフォーマットエラー

ここには、プログラムのソースファイル があります。

DatePickerController.java

package javafx.datepicker; 

import java.time.LocalDate; 
import java.time.format.DateTimeFormatter; 
import java.time.format.DateTimeFormatterBuilder; 
import javafx.fxml.FXML; 
import javafx.scene.control.Button; 
import javafx.scene.control.DatePicker; 
import javafx.scene.control.TextArea; 
import javafx.util.StringConverter; 

public class DatePickerController { 

@FXML 
private DatePicker dp; 

@FXML 
private Button btn; 

@FXML 
private TextArea ta; 

public void initialize() { 
    String pattern = "DD-MM-YYYY"; 
    dp.setPromptText(pattern); 
    try { 
     dp.setConverter(new StringConverter<LocalDate>() { 
      DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern); 

      @Override 
      public String toString(LocalDate object) { 
       if (object == null) { 
        return null; 
       } 
       return dtf.format(object); 
      } 

      @Override 
      public LocalDate fromString(String string) { 
       if (string != null & !string.isEmpty()) { 
        return LocalDate.parse(string, dtf); 
       } 
       return null; 
      } 
     }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

そして、ここでの主なクラスがある

JavaFXDatePicker.java

package javafx.datepicker; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class JavaFXDatePicker extends Application { 

public static void main(String... args) { 
    launch(args); 
} 

@Override 
public void start(Stage st) { 
    try { 
     Parent root = FXMLLoader.load(getClass().getResource("/javafx/datepicker/DatePicker.fxml")); 
     Scene sc = new Scene(root); 
     st.setScene(sc); 
     st.setTitle("JavaFX Date Picker"); 
     st.show(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

そして、ここでは、FXML Fiがありますル

DatePicker.fxml

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.lang.*?> 
<?import java.util.*?> 
<?import javafx.scene.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<AnchorPane id="AnchorPane" prefHeight="247.0" prefWidth="372.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="javafx.datepicker.DatePickerController"> 
<children> 
    <DatePicker fx:id="dp" layoutX="50.0" layoutY="51.0" prefHeight="25.0" prefWidth="273.0" /> 
    <Button fx:id="btn" layoutX="50.0" layoutY="99.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="273.0" text="Click" /> 
    <TextArea fx:id="ta" layoutX="50.0" layoutY="133.0" prefHeight="89.0" prefWidth="273.0" /> 
</children> 
</AnchorPane> 

そして、ここでは、エラーのstacktarceが

Exception in thread "JavaFX Application Thread" java.time.DateTimeException: Field DayOfYear cannot be printed as the value 196 exceeds the maximum print width of 2 
at java.time.format.DateTimeFormatterBuilder$NumberPrinterParser.format(DateTimeFormatterBuilder.java:2548) 
at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2179) 
at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1746) 
at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1720) 
at javafx.datepicker.DatePickerController$1.toString(DatePickerController.java:45) 
at javafx.datepicker.DatePickerController$1.toString(DatePickerController.java:37) 
at com.sun.javafx.scene.control.skin.ComboBoxPopupControl.updateDisplayNode(ComboBoxPopupControl.java:424) 
at com.sun.javafx.scene.control.skin.DatePickerSkin.handleControlPropertyChanged(DatePickerSkin.java:141) 
at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda$registerChangeListener$61(BehaviorSkinBase.java:197) 
at com.sun.javafx.scene.control.MultiplePropertyChangeListenerHandler$1.changed(MultiplePropertyChangeListenerHandler.java:55) 
at javafx.beans.value.WeakChangeListener.changed(WeakChangeListener.java:89) 
at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361) 
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81) 
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105) 
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112) 
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146) 
at javafx.scene.control.ComboBoxBase.setValue(ComboBoxBase.java:150) 
at com.sun.javafx.scene.control.skin.DatePickerContent.selectDayCell(DatePickerContent.java:689) 
at com.sun.javafx.scene.control.skin.DatePickerContent.lambda$createDayCells$174(DatePickerContent.java:731) 
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) 
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) 
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) 
at javafx.event.Event.fireEvent(Event.java:198) 
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470) 
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398) 
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766) 
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) 
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:380) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:294) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:416) 
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:415) 
at com.sun.glass.ui.View.handleMouseEvent(View.java:555) 
at com.sun.glass.ui.View.notifyMouse(View.java:937) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
at java.lang.Thread.run(Thread.java:745) 

である私は、この問題を解決するために、ほぼすべての方法が、常に悪い運を試してみました。

この問題を解決し、このエラーについても説明してください。

答えて

0

私はあなたが次のことをしたいと思う:

文字列のパターン= "DD-MM-YYYY";