检测JavaFX中的设计时间

时间:2013-05-08 18:14:44

标签: javafx-2

有没有办法在JavaFX2中检测可在SceneBuilder中运行的设计时间?类似的东西:

java.beans.Beans.isDesignTime()

摇摆?我正在开发应该在SceneBuilder中显示的自定义控件。但是在触发ClassNotFoundException中的一些代码。我不想添加所需的库,而是想绕过触发该异常的代码。

[更新]

我会告诉我要完成的事情。我扩展了输入控件组件(textfield,combobox等)并添加了propertyName属性。我还创建了一个Form extends面板,它将扫描其中的输入控件并根据propertiesName为它们赋值。该值取自设置为表单的POJO。我使用apache commons beanutls将值赋给输入控件,因此我需要为bean utils jar提供类路径。

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

3 个答案:

答案 0 :(得分:1)

JavaFX控件没有设计时间。

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

从邮件列表主题custom controls in SceneBuilder引用:

  

在SceneBuilder 1.0中,尚无法添加自定义控件   SceneBuilder的库面板。然而,可以加载   包含自定义控件的FXML。这在SceneBuilder中有描述   用户指南 - 请参阅有关自定义类型元素的部分:

     

http://docs.oracle.com/javafx/scenebuilder/1/user_guide/library-panel.htm

     

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

     
      
  1. 一定不需要特殊的生成器工厂。
  2.   
  3. 它必须有一个公共空构造函数。
  4.   
  5. 如果它使用FXMLLoader加载一些嵌套的FXML文件,那么   必须将FXMLLoader配置为使用ClassLoader   自定义组件已加载   (见https://forums.oracle.com/forums/thread.jspa?forumID=1385&threadID=2433150   对于最后一项要求背后的血腥细节)
  6.   

回答其他一些问题:

  

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

Custom and Unknown Element Types section of the SceneBuilder User Guide表示如果您没有提供自定义控件使用的类的路径,则fxml通常仍会在SceneBuilder中加载。如果提供了库,则SceneBuilder将提供额外的功能(Scene Builder应该能够在“内容”面板和“层次”面板中呈现它们。)

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

答案 1 :(得分:0)

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

答案 2 :(得分: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
}