JavaFX技巧10:自定义复合控件
用JavaFX編寫自定義控件是一個簡單直接的過程。 需要一個控件類來控制控件的狀態(因此命名)。 外觀需要控件的外觀。 而且通常不是用于自定義外觀CSS文件。
控件的常用方法是將其使用的節點隱藏在其外觀類中。 例如, TextField控件使用javafx.scene.text.Text的兩個實例。 一個用于常規文本,一個用于提示文本。 這些節點不能通過TextField API訪問。 如果要獲取對它們的引用,則需要在Node上調用lookup(String)方法。 到目前為止,一切都很好。 實際上,很難想到您實際上需要訪問Text節點的用例。
但…
如果您開發復雜的自定義控件,那就完全不一樣了。 FlexGanttFX Gantt圖表框架就是一個示例。 GanttChart控件由許多其他復雜控件組成,并且遵循“ 關注點分離 ”的原則,這些控件包含所有與它們正常工作相關的方法和屬性。 如果這些控件隱藏在甘特圖的外觀內,則將無法訪問它們,而甘特圖控件將需要實現大量的委托方法。 這將完全弄亂甘特圖API。 因此, GanttChart類確實提供了其子控件的訪問器方法,甚至提供了用于創建子節點的工廠方法。
例
以下屏幕截圖顯示了我當前正在為ControlsFX項目使用的新控件 。 我稱之為ListSelectionView ,它具有兩個ListView實例。 用戶可以通過雙擊項目或使用中間的按鈕將項目從一個列表移動到另一個列表。
列表視圖是復雜的控件。 他們有自己的數據和選擇模型,他們自己的單元工廠,他們觸發事件等等。 所有這些事情我們都可能想要自定義或聆聽。 如果視圖隱藏在皮膚類中,則很難做。 解決方案是通過受保護的工廠方法在控件類內部創建列表視圖,并提供訪問器方法。
以下代碼片段顯示了可以使用的模式:
public class ListSelectionView<T> extends Control {private ListView<T> sourceListView;private ListView<T> targetListView;public ListSelectionView() {sourceListView = createSourceListView();targetListView = createTargetListView();}protected ListView<T> createSourceListView() {return new ListView<>();}protected ListView<T> createTargetListView() {return new ListView<>();}public final ListView<T> getSourceListView() {return sourceListView;}public final ListView<T> getTargetListView() {return targetListView;} }工廠方法可用于創建標準ListView實例并在此處配置它們,或返回已經存在的ListView專業化對象。 一家名為ACME的公司可能已經提供了一套標準的控件(用于實現公司的營銷概念)。 然后,工廠方法可能會返回一個稱為ACMEListView的控件。
翻譯自: https://www.javacodegeeks.com/2014/07/javafx-tip-10-custom-composite-controls.html
總結
以上是生活随笔為你收集整理的JavaFX技巧10:自定义复合控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯混元大模型今日起对外开放,每 100
- 下一篇: 什么是硝化作用和反硝化作用 硝化作用和反