如何在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>