首页 > 解决方案 > 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 中的一个错误,没有识别(记录不充分?)合法进口?

标签: javajavafxfxml

解决方案


推荐阅读