FXML导入静态嵌套类

时间:2018-12-18 10:09:25

标签: java javafx 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中的错误,没有识别出(记录不充分?)合法的进口?

0 个答案:

没有答案