如何在javafx中使用@namedArg将非字符串对象作为参数传递?我在网上找不到有关此问题的简明示例!

我目前正在尝试从包装在VirtualizedScrollPane中的RichTextFX实例化InlineCssTextArea-请查看以下源代码:

public VirtualizedScrollPane(@NamedArg("content") V content) {
  [...]
}


自定义类型V在其中扩展Node。就我而言,我想将InlineCssTextArea传递为V。以编程方式执行此操作非常简单:

InlineCssTextArea area = new InlineCssTextArea();
Scene scene = new Scene(new StackPane(new VirtualizedScrollPane<>(area)), 600, 400);


但是将其转换为FXML颇具挑战性。我已经尝试过一些东西,例如基于官方oracle fxml教程的fx:factory:

<VirtualizedScrollPane fx:factory="content">
  <InlineCssTextArea />
</VirtualizedScrollPane>


或@namedArg的建议,作为参数:

<VirtualizedScrollPane content="InlineCssTextArea" />


-要么-

<VirtualizedScrollPane content="<InlineCssTextArea />" />


是否有针对此问题的fxml解决方案?

我的问题基于詹姆斯·D的以下回答:What is the purpose of @NamedArg annotation in javaFX 8?

最佳答案

基本上,您需要为名为content的参数传递值。在FXML中传递参数值的两种方法是作为属性:content="..."或使用属性元素。仅当您可以传递FXML加载程序知道如何将其转换为适当值的字符串(即,如果该值是字符串或原始类型)时,使用属性才有效,在这里不是这种情况。使用属性元素,您只需嵌套一个名称为属性名称的元素,并将值嵌套在其中:

<VirtualizedScrollPane>
    <content>
        <InlineCssTextArea />
    </content>
</VirtualizedScrollPane>

08-05 08:33
查看更多