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