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