JavaFX Scene Builder 自定义选项卡

JavaFX Scene Builder custom tab

我已经为 JavaFX 创建了自己的自定义控件。当我将它手动添加到 FXML 文件中时,它运行良好。当我尝试导入它时,它是 Java Scene Builder 的 "invisible"。所以,我有下一个代码(极其简化的版本): MyTab.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.* ?>
<?import tafm.javafx.controls.MyTab?>


<fx:root type="javafx.scene.control.Tab" xmlns:fx="http://javafx.com/fxml">
</fx:root>

MyTab.java

package tafm.javafx.controls;

import javafx.fxml.FXMLLoader;
import javafx.scene.control.Tab;

import java.io.IOException;

public class MyTab extends Tab {

    public MyTab() {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MyTab.fxml"));
        fxmlLoader.setRoot(this);
        fxmlLoader.setController(this);
        fxmlLoader.setClassLoader(getClass().getClassLoader());
        try {
            fxmlLoader.load();            
        } catch (IOException exception) {
            throw new RuntimeException(exception);
        }
    }
}

我已经用这个控件构建了一个 jar 文件并尝试将其导入 JavaFX Scene Builder 2.0。导入时出现一个错误 "Not a node: tafm.javafx.controls.MyTab.class",并且没有可用的 MyTab 控件。

然后我将此 class(连同 fxml)更改为:

public class MyTab extends HBox

(仅用于测试目的)。成功加载到SB! 因此,据我了解,不可能创建自己的 "Tab"。是真的吗? 当然,我可以手动编辑 fxml 文件,但我想在 SB 中进行。是否存在一些解决方法?

Tab in JavaFX is not inherited from the Node。从您收到的消息中也可以清楚地看到。

所有自定义控件都必须是场景图的一部分,即基于Node. It is preferable that all custom controls inherit from Control,这将简化和标准化它们的开发。