簡體   English   中英

我們應該在JavaFX自定義控件中使用FXML嗎?

[英]Should we use FXML in JavaFX custom controls or not?

似乎有點問這個,我認為使用FXML來編寫我們的自定義組件顯然是正確的方法。

但正如我們從ControlsFX,JFXextras甚至“掌握JavaFX8控件”這本書中看到的那樣,不要在自定義控件中使用或提及FXML的使用。

盡管如此,官方文檔說要繼續這條路線,並通過FXML創建JavaFX控件。

什么是更正確的方式和原因?

JavaFX中有兩種自定義控件:

  • fx:基於root的自定義控件 :這些自定義控件是可定制的(支持CSS),但不是可換膚的。

    如果您是應用程序開發人員,那么這就是您希望在大多數時間使用的內容。

    這種控件通常是應用程序或組織特定的。 不需要為這些控件提供額外的自定義皮膚,CSS就足夠了。

    通常他們只是將一些控件組合在一起並提供更好的API並隱藏內部。

    它們比可換膚的自定義控件更容易編寫。

    我認為這是Swing-world中JPanel子類的替代品。

    我建議將你的GUI細分為小型自包含的fx:基於root的控件(高內聚,低耦合)。 使用Mediator Pattern來組合這些控件(父控件管理/配置其子控件並偵聽其子控件的事件。子控件彼此不了解)。

    您可以創建此類控件的整個層次結構。 將它們分解為小控件將使維護更容易(例如,如果布局或用戶交互必須改變)。

  • skinnable自定義控件 :skinnable自定義控件不僅可以設置樣式(通過CSS),而且可以通過提供自定義外觀完全更改其外觀。

    如果您是一個控件庫開發人員,那么很可能您希望提供可換膚的自定義控件,以允許庫的用戶充分利用JavaFX。

    這種控件通常是非常基本的,高度可重復使用的控件,並且通常(但不總是)使用一些自定義繪畫。

    他們比fx更難做到:基於root的自定義控件。

沒有正確的方法。 但我們可以將其分解為:

您知道應用程序啟動之前要顯示的JavaFX元素數量嗎? 如果是,您可以使用SceneBuilder構建GUI,或者直接在XML中編寫FXML文件。 大多數GUI屏幕設置都是如此,其中整體布局(MenuBar,ToolBar,內容,側邊欄,...)是眾所周知的,並且不會隨着時間而改變。

現在,自定義組件不知道如何顯示自己。 有許多選項可供選擇,大多數自定義組件都是動態構建的,或者在用戶更改這些選項時可能會發生巨大變化。 您不能編寫單個FXML文件,而是必須編寫許多單個文件,每個文件都會構建自定義組件的一小部分。 這對管理來說並不是很方便,因此大多數開發人員選擇直接在代碼中使用FXML來完成。

最重要的是:有許多自定義組件使用特殊的布局而不是內置於JavaFX中,為了實現這一點,您必須編寫自己的容器並使用自定義組件連接它們以獲得完美的結果。 最后,構建自定義組件(或者更好:應該構建)以在FXML / SceneBuilder中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM