java - FXML 导入静态嵌套类
问题描述
假设我有一个自定义 JavaFX 控件Foo
,其中一个特殊案例实现为嵌套静态类Foo$Bar
:
package com.acme;
import javafx.scene.control.Control;
public class Foo extends Control {
public static class Bar extends Foo {
}
}
现在我可能想在 FXML 中使用这个控件,所以我希望我应该做这样的事情:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import com.acme.Foo$Bar?>
<VBox xmlns="http://javafx.com/javafx/8.0.191" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Foo.Bar/>
</children>
</VBox>
但是,这会导致 FXML 无法加载,从而引发错误
javafx.fxml.LoadException:Foo.Bar 不是有效类型。
奇怪的是,如果我将导入更改为:
<?import com.acme.Foo.Bar?>
FXML 正确加载,但我的 IDE(IntelliJ)将导入标记为错误 - 我倾向于同意它,因为 FXML 规范似乎要求使用完全限定的类名进行导入,在这种情况下是com.acme.Foo$Bar
而不是com.acme.Foo.Bar
.
那么这是 JavaFX 中的一个错误/FXMLLoader
无法识别静态嵌套类的完全限定名称吗?或者它是 IntelliJ 中的一个错误,没有识别(记录不充分?)合法进口?
解决方案
推荐阅读
- html - 如何强制溢出一行的所有单词换行到下一行?
- c# - 获取 System.InvalidOperationException:“获取文件所有权时,集合已修改错误
- powerbi - 如何使用 DAX 函数/高级编辑器数据类型转换使用 Power BI 将 24 小时格式转换为 12 小时格式?
- elasticsearch - Metricbeat Beat连接es失败(启用xpack)
- apache-spark - Pyspark:如何通过只运行主服务器来设置 SparkContext?
- flutter - 在 Ubuntu 18.04.3 LTS 中运行 sdkmanager 后出错
- javascript - javascript通过子文本获取所有div?
- woocommerce - Woocommerce 产品摘要简码
- java - 如何使文本视图可点击到 Android Studio 中的 URL
- mongodb - Docker - Mongo 数据库实例未与应用程序连接