【问题标题】:JavaFX Scene Builder custom tabJavaFX 场景生成器自定义选项卡
【发布时间】:2016-08-09 06:07:10
【问题描述】:

我已经为 JavaFX 创建了自己的自定义控件。当我将它手动添加到 FXML 文件中时,它运行良好。当我尝试导入 Java Scene Builder 时,它是“不可见的”。所以,我有下一个代码(非常简化的版本): 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。仅导入一个错误“不是节点:tafm.javafx.controls.MyTab.class”并且没有可用的 MyTab 控件。

然后我将这个类(连同 fxml)更改为:

public class MyTab extends HBox

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

【问题讨论】:

    标签: java javafx-8 scenebuilder


    【解决方案1】:

    JavaFX 中的Tab 不是从Node 继承的。从您收到的消息中也很清楚。

    所有自定义控件都必须是场景图的一部分,即基于Node。最好是所有自定义控件都继承自Control,这将简化和标准化它们的开发。

    【讨论】:

    • 很清楚。但是是否存在一些解决方法? SB如何自己工作?它在控制列表中包含 Tab。好的了解了。在 Oracle 团队决定改进 SB 之前,这是不可能的。
    猜你喜欢
    • 2015-06-10
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2015-07-04
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多