日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

javafx 项目_JavaFX,Jigsaw项目和JEP 253

發布時間:2023/12/3 java 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javafx 项目_JavaFX,Jigsaw项目和JEP 253 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

javafx 項目

因此, Java 9可能會破壞您的代碼 ……

如果您的項目使用JavaFX,則這尤其可能,因為許多自定義和自制控件都需要使用內部API。 借助Project Jigsaw,這些內容將無法在Java 9中訪問。幸運的是, Oracle在幾天前宣布了 JEP 253 。 其目標:

為JavaFX UI控件和CSS功能定義公共API,這些公共API當前僅可通過內部API使用,因此由于模塊化而變得不可訪問。

JEP 253 – 2015年5月14日

讓我們看一下JavaFX,Jigsaw項目和JEP 253是如何交互的。

總覽

為了更好地了解內部API在JavaFX中的作用,了解其控制體系結構將很有幫助,因此我們將從此開始。 然后,我們將研究為什么在使用JavaFX時經常使用內部API。 這將有助于將新的JEP置于上下文中。

因為我熟悉它,所以我經常以ControlsFX為例。 我假設類似的庫(例如JFXtras )以及其他自定義JavaFX的項目都處于相同的情況。

JavaFX控制架構

模型視圖控制器

JavaFX控件是根據model-view-controller實現的 。 無需贅述,讓我們快速了解一下如何完成。 (有關詳細信息,請參見GuiGarage 。)

所有正式控件都擴展了抽象類Control 。 這是MVC的模型。

該控件定義一個skinProperty ,其中包含一個Skin實現。 它可視化控件的當前狀態,即它是MVC的視圖。 默認情況下,它還負責捕獲和執行用戶交互,這在MVC中是控制器的任務。

皮膚通常是通過擴展BehaviorSkinBase實現的。 它創建了BehaviorBase的實現,將所有用戶交互委托給該BehaviorBase的實現,并相應地更新了模型。 因此,這里有MVC的控制器。

按鍵綁定

還值得注意的是控件如何解決用戶輸入。 為了將動作鏈接到輸入(例如,“ CTRL +鼠標單擊”中的“在后臺打開新選項卡”),它們創建了KeyBindings列表。 然后將輸入事件與所有創建的綁定進行比較,并調用正確的操作。

由Flosweb在CC-BY-SA下發布 -我添加了拼圖效果。

JavaFX中的內部API

使用JavaFX時,通常依賴于內部API。 這樣做是為了創建新控件,調整現有控件或修復錯誤。

創建新控件

雖然Control , Skin甚至SkinBase都是公共API,但經常使用的BehaviorSkinBase和BehaviorBase不是。 使用拼圖項目,將無法訪問它們。

不過,該API的使用率很高。 ControlsFX包含大約二十個控件,其中大約一半需要這些類之一的實現。

同樣,鍵KeyBindings沒有發布,因此創建鍵KeyBindings來管理用戶交互會增加另一個有問題的依賴性。

調整現有控件

自定義現有控件通常會更改可視化效果或調整某些用戶交互的行為。

對于前者,簡單地擴展和修改現有的外觀通常是最容易的。 不幸的是,現有控件的所有外觀都位于com.sun.javafx.scene.control.skin 。 當它們變得不可訪問時,許多自定義控件將不再編譯。

要更改控件對用戶交互的React,必須干預BehaviorBase定義的BehaviorBase 。 這類似于創建新控件,通常通過擴展BehaviorSkinBase和BehaviorBase并創建新的KeyBindings 。

通過CSS設置控件的樣式

在JavaFX中,可以實現控件,以便可以通過CSS設置樣式。 所有官方控件都具有此功能,其他一些控件也由其他項目提供。

設置控件樣式的中心步驟是將屬性的文本表示形式從CSS文件轉換為Number , Paint ,enum…的實例,以便可以將它們分配給屬性。 為了確保統一,高質量的轉換,JavaFX為此提供了一個API。 不幸的是,它位于com.sun.javafx.css.converters 。

高級樣式要求必須在StyleManager幫助下實現,您猜想它也沒有發布。

解決錯誤

JavaFX相對來說還很年輕,但仍然包含一些很難接觸的錯誤。 通常,唯一的解決方法是侵入控件的內部工作原理,從而使用私有API。 (此類情況的示例可以在OpenJFX郵件列表中找到,例如RobertKrüger , Stefan Fuchs和Tom Schindl在這些郵件中。)

這些變通辦法將在Java 9中失敗。由于似乎所有錯誤均已修復,因此它們不必要變得不必要,因此可以理解以下問題:

當然,從理論上講,如果所有[那些bug]都已在[Java] 9中得到了修復,那我很好,但是如果有一段時間將其中的一半修復在9中,而另一半只能在8,我該如何處理我的產品?

羅伯特·克魯格– 2015年4月9日

杰普253

我們已經了解了為什么在使用JavaFX時普遍使用內部API。 那么, JEP 253如何解決這個問題?

(除非另有說明,否則本節中的所有引號均取自JEP。)

目標,非目標和成功指標

該提案恰好解決了到目前為止所描述的問題。 而且它認識到“在很多情況下,要獲得理想的結果,開發人員別無選擇,只能使用這些內部API”。 因此,“此JEP的目標是為內部API當前提供的功能定義公共API”。

(請注意,當開發人員將其代碼從內部移動并且現在無法訪問新的公共API時,這仍然會帶來編譯錯誤。)

同時,該JEP既不計劃對現有已發布的代碼進行任何更改,也不進行任何改進:“不受模塊化影響的所有其他現有API都將保持不變。”

定義了兩個成功指標:

  • “依賴JavaFX內部API的項目,尤其是Scene Builder,ControlsFX和JFXtras,在更新到新的API之后仍可以繼續工作,而不會失去功能。”
  • “最終,如果所有工作都按計劃進行,那么第三方控件應該是可構建的,而不依賴于內部API。”

三個項目

JEP分為三個項目:

項目一:使UI控件外觀成為公共API

現有控件的外觀將從com.sun.javafx.scene.control.skin移至
javafx.scene.control.skin 。 這將使它們成為已發布的API。 (請注意,這不包括行為類。)

項目二:改進對輸入映射的支持

行為將通過輸入映射來定義。 這允許在運行時更改控件的行為,而無需擴展任何特定(且未發布)的類。

項目三:審查并公開相關CSS API

com.sun.*軟件包中當前可用CSS API將進行審查和發布。 該提案將更加詳細,并描述每個項目的當前狀態以及一些風險和假設。

這些項目解決了上述四個用例中的三個。 可以合理地假設可以滿足這些要求,并且在Java 9中,即使無法訪問內部API,也可以正確地創建,調整和皮膚控件。

如何解決錯誤? 至少其中一些似乎可以用相同的工具解決(例如,擴展現有的皮膚)。 但是我不能說這是否對所有人都適用,以及沒有解決方法留下來的重要性有多重要。

時間表

如果您想試用新的API,則必須耐心等待一段時間。 JFX 253的所有者,JavaFX UI控件團隊的Oracle技術負責人喬納森·吉爾斯(Jonathan Giles)在推文中說,“他可能在幾個月內不會合并到存儲庫中……”。

另一方面,由于Java 9的功能完整性計劃于12月發布 ,因此它必須在接下來的七個月內可用。

反射

我們已經看到,使用JavaFX常常需要使用私有API。 這發生在三個截然不同的區域:

  • 根據控件體系結構(MVC)創建新控件。
  • 通過擴展其外觀或更改鍵綁定來調整現有控件。
  • 通過CSS設置控件的樣式。
  • 解決錯誤。

JEP 253分為三個項目,分別針對前三個領域。 (對于我來說)尚不清楚它們是否足以僅使用公共API來解決錯誤。

翻譯自: https://www.javacodegeeks.com/2015/05/javafx-project-jigsaw-and-jep-253.html

javafx 項目

總結

以上是生活随笔為你收集整理的javafx 项目_JavaFX,Jigsaw项目和JEP 253的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。