Javafx 2 在JavaFX中检测设计时

Javafx 2 在JavaFX中检测设计时,javafx-2,Javafx 2,是否有一种方法可以检测JavaFX2中的设计时间,这种方法可以在SceneBuilder中使用?类似于: java.beans.Beans.isDesignTime() 秋千?我正在开发应该在SceneBuilder中显示的自定义控件。但是,触发器类NotFoundException中的一些代码。我不想添加所需的库,而是想绕过触发该异常的代码 [更新] 我会告诉你我将要完成什么。我扩展了输入控件组件(textfield、combobox等)并添加了propertyName属性。我还创建了一个F

是否有一种方法可以检测JavaFX2中的设计时间,这种方法可以在SceneBuilder中使用?类似于:

java.beans.Beans.isDesignTime()
秋千?我正在开发应该在SceneBuilder中显示的自定义控件。但是,触发器类NotFoundException中的一些代码。我不想添加所需的库,而是想绕过触发该异常的代码

[更新]

我会告诉你我将要完成什么。我扩展了输入控件组件(textfield、combobox等)并添加了propertyName属性。我还创建了一个FormExtends面板,它将扫描其中的输入控件,并根据propertName为它们赋值。该值取自设置为表单的POJO。我使用ApacheCommonsBeanutls将值分配给输入控件,因此我需要提供BeanUtilsJAR的类路径


如果我自动激活该功能,我就不能在SceneBuilder中使用表单。因为表单将检测其中的输入控件并执行赋值,因此需要库。我决定停用该功能,并为程序员提供一种方法来激活它。这不是我想要的,但我想我别无选择。

FXML始终是设计时。如果您使用FXML设计控件,然后在其控制器中设计所有逻辑和事件处理,那么您可以免费获得此功能。

FXML始终是设计时。如果您使用FXML设计控件,然后在其控制器中设计所有逻辑和事件处理,那么您可以免费获得这些功能。

JavaFX控件没有这样的设计时间

相反,控制代码需要遵循几个简单的规则,如本答案中所述

从邮件列表线程引用:

在SceneBuilder 1.0中,尚无法将自定义控件添加到 SceneBuilder的库面板。但是,可以加载 包含自定义控件的FXML。这在SceneBuilder的 用户指南-请参见此处有关自定义类型元素的部分:

请注意,为了能够加载包含自定义元素的FXML 在SceneBuilder中,该自定义元素必须“行为良好”

  • 它不需要特殊的建筑商工厂
  • 它必须有一个公共空构造函数
  • 如果它使用FXMLLoader加载一些嵌套的FXML文件,那么 必须将FXMLLoader配置为使用 已加载自定义组件 (见 了解最后一项要求背后的血淋淋的细节)
  • 要回答其他一些问题:

    我不想添加所需的库,而是想绕过触发该异常的代码

    声明说,如果不提供自定义控件使用的类的路径,fxml通常仍将加载到SceneBuilder中。如果提供了库,则SceneBuilder将提供额外的功能(场景生成器应能够在“内容”面板和“层次”面板中渲染它们)


    我的猜测是,通过使用自定义控件,而不是产品的1.0版本,您将获得对自定义控件的最佳支持。

    JavaFX控件没有这样的设计时间

    相反,控制代码需要遵循几个简单的规则,如本答案中所述

    从邮件列表线程引用:

    在SceneBuilder 1.0中,尚无法将自定义控件添加到 SceneBuilder的库面板。但是,可以加载 包含自定义控件的FXML。这在SceneBuilder的 用户指南-请参见此处有关自定义类型元素的部分:

    请注意,为了能够加载包含自定义元素的FXML 在SceneBuilder中,该自定义元素必须“行为良好”

  • 它不需要特殊的建筑商工厂
  • 它必须有一个公共空构造函数
  • 如果它使用FXMLLoader加载一些嵌套的FXML文件,那么 必须将FXMLLoader配置为使用 已加载自定义组件 (见 了解最后一项要求背后的血淋淋的细节)
  • 要回答其他一些问题:

    我不想添加所需的库,而是想绕过触发该异常的代码

    声明说,如果不提供自定义控件使用的类的路径,fxml通常仍将加载到SceneBuilder中。如果提供了库,则SceneBuilder将提供额外的功能(场景生成器应能够在“内容”面板和“层次”面板中渲染它们)


    我的猜测是,通过使用自定义控件,而不是产品的1.0版本,您将获得对自定义控件的最佳支持。

    您可以使用此类:

    public class SceneBuilderHelper
    {
        public static boolean isSceneBuilder()
        {
            try
            {
                Class.forName("com.oracle.javafx.scenebuilder.app.SceneBuilderApp");
                return true;
            }
            catch (ClassNotFoundException e)
            {
            }
    
            return  false;
        }
    }
    
    在代码中,您可以执行以下操作:

    if (!SceneBuilderHelper.isSceneBuilder())
    {
       // do things that should not be done in SceneBuilder
    }
    

    您可以使用这个类:

    public class SceneBuilderHelper
    {
        public static boolean isSceneBuilder()
        {
            try
            {
                Class.forName("com.oracle.javafx.scenebuilder.app.SceneBuilderApp");
                return true;
            }
            catch (ClassNotFoundException e)
            {
            }
    
            return  false;
        }
    }
    
    在代码中,您可以执行以下操作:

    if (!SceneBuilderHelper.isSceneBuilder())
    {
       // do things that should not be done in SceneBuilder
    }