2013-04-23 112 views
8

我有基於web的編程(php,jsf,...)和swing和swt最小背景的背景。Java FX:聲明式與程序式

目前,我正在尋找一個新的桌面應用程序的java fx 2.x,我想知道關於構建真正的GUI的最佳實踐。我可以用fxml去聲明路線,也可以去程序路線。目前對於一些快速原型,我正在做後者,但我想知道是否有令人信服的理由來使用fxml。

UPDATE

在我去了一箇中等規模的項目,即使現場建設者測試仍然是我的Linux系統上有些不穩定的FXML路線年底,它已被證明是大大優於原始程序原型。到目前爲止,最大的優勢是很多元素(特別是hbox,vbox,labels,tabs,...)不再混亂我的代碼,因爲它們只存在於fxml中。

回答

12

甲骨文建議

參閱Oracle建議:

  1. Why use FXML
  2. Implementing JavaFX Best Practices

甲骨文不推薦佈局定義FXML過的Java API。

備用陳述技術爲JavaFX

其他聲明條的JavaFX是CSS3D models

一個半聲明的方法是JavaFX Builder API,但你可能想避免,作爲the builder api will be deprecated in future JavaFX versions

此外,如果您使用其他語言編程,其中一些嵌入了JavaFX開發的聲明性域特定語言(DSL)(例如ScalaFXGroovyFX)。

通常,聲明性語法的使用主要贏得了大多數UI標記任務的程序性編程。這通過技術,如HTML,CSS,FXML,XAML,MXML,XUL的突出可以看出,等

低級編程

對於低級別的任務,例如開發一個自定義的JavaFX控制,操作JavaFX畫布或處理圖像數據時,程序化Java API最適合使用聲明式FXML,而不是JavaFX codebase in openjfx都使用FXML。

個人選擇和諮詢

最後,這裏沒有正確的答案。這個選擇留給開發者選擇他們最喜歡的方法。

你也沒有理由不能混合你認爲合適的兩種風格。與使用過程式和聲明式方法(例如html + javascript + ajax)的東西相比,使用直接聲明式方法會留下非常嚴格的UI(例如靜態html頁面) - 對於JavaFX也是如此在這種情況下爲html開發。

對於小程序,我喜歡在IDE中編寫一些代碼,編譯並運行它,而不必處理基於XML的FXML和Java代碼之間的上下文切換。但是我發現這種只採用程序的方法並不能很好地適應大型項目。將視圖分爲FXML有助於實現關注點和模塊化的分離。如果沒有FXML所要求的人爲分離,將這些觀點和邏輯關注點混合起來是非常容易的。

我不太喜歡XML作爲UI佈局語言。我認爲現在已經過時的JavaFX 1.x分支的FXD格式非常優秀。但是,FXML是JavaFX 2中最容易訪問和廣泛使用的聲明性UI語法。

我在JavaFX程序中使用了很多CSS,並且喜歡在FXML聲明性代碼和Java API過程代碼中使用它。在我看來,將代碼與樣式分離至少同樣重要,因爲它將代碼與佈局分開。

使用CSS時,最好將樣式放在單獨的樣式表中,而不是在代碼中內聯樣式。

正如另一個答案中指出的那樣,JavaFX SceneBuilder可視化設計工具目前僅適用於FXML,除此之外,許多人都有理由使用FXML來定義他們的JavaFX UI。

2

我使用fxml的原因是它可以由Scene Builder生成。我不想用手來擺弄佈局......

2

如果您將佈局(FXML)與應用程序代碼分開,那麼您可以請求一些UX用戶使用僅適用於SceneBuilder,而不是要求他們使用整個IDE。

1

儘管如此,SceneBuilder還不夠完善。我們必須回到FXML手中來獲取細節,但這並不好。

SceneBuilder中的一些小bug有很大的細節FXML文件。

Oracle必須更新SceneBuilder for JavaFX的健康狀況!因爲很好看的工具!