2013-05-08 41 views
1

有沒有一種方法可以在SceneBuilder中檢測JavaFX2中的設計時間?類似的東西:在JavaFX中檢測設計時間

java.beans.Beans.isDesignTime() 

for swing?我正在開發應該在SceneBuilder中顯示的自定義控件。但是觸發ClassNotFoundException中的一些代碼。我不想添加所需的庫,而是想繞過觸發該異常的代碼。

[更新]

我會告訴我要完成什麼。我擴展了輸入控件組件(textfield,combobox等)並添加了propertyName屬性。我還創建了一個Form extends面板,它將掃描其中的輸入控件並根據propertName爲它們分配值。該值取自設置爲表單的POJO。我使用apache commons beanutls來將值分配給輸入控件,因此我需要將類路徑提供給bean utils jar。

如果我自動激活該功能,則無法在SceneBuilder中使用Form。因爲表單會檢測輸入控件,因此需要使用庫。我決定停用該功能,併爲程序員提供激活它的方法。這不是我想要的,但我想我別無選擇。

回答

0

FXML總是設計時間。如果你在FXML中設計你的控件,然後在它的控制器中進行所有的邏輯和事件處理,那麼你可以免費得到它。

1

JavaFX控件沒有這樣的設計時間。

相反,控制代碼需要遵循這個答案中概述的幾條簡單規則。

從郵件列表線程custom controls in SceneBuilder報價:

在SceneBuilder 1.0目前尚不可自定義的控件添加到 SceneBuilder的庫面板中。但是,可以加載包含自定義控件的FXML。這SceneBuilder的 用戶指南中描述 - 參見在自定義類型的元素有部分:

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

注意,對於能夠加載包含定製元素 在SceneBuilder一個FXML,該自定義元素必須是「好乖」。

  1. 它必須不需要特殊的生成器工廠。
  2. 它必須有一個公共的空構造。
  3. 如果它使用一個FXMLLoader加載一些嵌套FXML文件,則該 FXMLLoader必須被配置爲使用從該 定製組件裝載 類加載器(參見https://forums.oracle.com/forums/thread.jspa?forumID=1385&threadID=2433150 對於後面這最後一個要求的複雜細節)

回答一些附加分:

我不想添加所需的庫,而不是我想繞過觸發,電子代碼xception。

Custom and Unknown Element Types section of the SceneBuilder User Guide狀態,如果你不提供通過定製控件使用的類路徑中,FXML一般還在SceneBuilder加載。如果提供了庫,SceneBuilder將提供額外的功能(場景生成器應該能夠在「內容」面板和「層次」面板中呈現它們)。

我的猜測是,您將通過使用recent 1.1+ build of SceneBuilder而不是產品的1.0版本來獲得自定義控件的最佳支持。

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 
}