安
   
    FXMLLoader
   
   通过反射实例化类型。这意味着类必须有一个构造函数,其参数用注释
   
    
     @NamedArg
    
   
   或者一个参数为零的构造函数。这个
   
    @ NamedArg
   
   解决了参数名不必保存在字节代码中的问题,这可以更好地解释为
   
    this answer
   
   . 将根据中指定的规则在对象上设置其余属性。
   
    this section
   
   属于
   
    fxml简介
   
   . 总而言之,fxml属性/元素必须具有相应的只读属性setter
   
    List
   
   属性或只读
   
    Map
   
   目标类中的属性。
  
  
   这对你的问题意味着什么:
  
  
   - 
    这取决于
    
     StringConverter
    .
     - 
      它必须具有无参数构造函数或具有
      
       @ NamedArg
      带注释的构造函数参数。
 
- 
    这取决于你设置的对象
    
     串级变换器
    在。
     - 
      它必须具有适当注释的构造函数参数,或者属性必须具有setter。否则,fxml加载程序将不知道如何设置转换器。
     
 
   看看源代码,它看起来不像
   
    串级变换器
   
   实现使用
   
    @ NamedArg
   
   注释。但是,它们通常提供一个无参数构造函数。这将允许您使用它们,但您可能会失去自定义它们的能力。例如,当使用
   
    LocalDateStringConverter
   
   您将无法自定义格式。
  
  
   也就是说,您可以创建一个工厂类并使用
   
    
     fx:factory
    
   
   在fxml文件中。
  
  public class Converters {
    public static StringConverter<LocalDate> myAwesomeConverter() {
        DateTimeFormatter formatter = ...;
        return new LocalDateStringConverter(formatter, formatter);
    }
}
  <DatePicker>
    <converter>
        <Converters fx:factory="myAwesomeConverter"/>
    </converter>
</DatePicker>
  
   或者,如果不需要自定义格式化程序,可以使用转换器的no arg构造函数。
  
  <DatePicker>
    <converter>
        <LocalDateStringConverter/>
    </converter>
</DatePicker>