郭強(qiáng)
摘要:JavaFX作為替代了Swing作為Java語(yǔ)言進(jìn)行圖形界面開(kāi)發(fā)的新工具,正在得到越來(lái)越多的開(kāi)發(fā)者的支持[1]。而作為一種新的界面開(kāi)發(fā)工具,相關(guān)教材上對(duì)于其具體應(yīng)用并不詳盡,尤其是對(duì)一些復(fù)雜的組件的介紹,如在這里要介紹的列表視圖組件TableView,作為一個(gè)功能強(qiáng)大的組件,它的使用還存在著許多需要普及和重視的方面,在這里對(duì)TableView的功能進(jìn)行挖掘。
關(guān)鍵詞:JavaFX;TableView;組件
中圖分類(lèi)號(hào):TP393.09 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2018)01-0106-01
雖然JavaFX已經(jīng)得到Oracle公司和相關(guān)組織的全力支持,但由于Swing存在的時(shí)間長(zhǎng),已經(jīng)得到了廣大開(kāi)發(fā)者的認(rèn)可,很多開(kāi)發(fā)者對(duì)JavaFX的理解并不深刻[2]。而TableView作為JavaFX中的一個(gè)常用的組件,常常用來(lái)進(jìn)行數(shù)據(jù)條目的顯示和操作,其功能非常強(qiáng)大,定義了繁多的API幫助開(kāi)發(fā)者實(shí)現(xiàn)對(duì)數(shù)據(jù)的不同操作,而且自身還具有排序、多重排序等功能。因此能夠深入的理解TableView的使用將會(huì)為程序設(shè)計(jì)開(kāi)發(fā)帶來(lái)非常大的便利,關(guān)于TableView的使用使這里要介紹的內(nèi)容
1 TableView結(jié)構(gòu)
TableView以表格的形式顯示和加載數(shù)據(jù),所以像表格一樣,一個(gè)TableView對(duì)象需要定義它的列,因此TableView經(jīng)常需要和TableColumn、TableCell對(duì)象進(jìn)行組合使用,分別來(lái)指定表格的列和數(shù)據(jù)單元。
1.1 TableView
TableView用以對(duì)數(shù)據(jù)進(jìn)行表格形式的顯示。JavxFX在定義時(shí)賦予了排序,調(diào)整列寬的功能,而TableView的數(shù)據(jù)來(lái)源可以是從數(shù)據(jù)庫(kù)中讀取的數(shù)據(jù)集進(jìn)行加載得到,也可以從開(kāi)發(fā)者定義的ObservableList對(duì)象中獲取。但是終究是要從ObservableList對(duì)象中得到數(shù)據(jù),所以O(shè)bservableList對(duì)象成為了數(shù)據(jù)的來(lái)源。TableView對(duì)象通過(guò)setItems(ObservableLis
1.2 數(shù)據(jù)模型
數(shù)據(jù)模型提供了TableView數(shù)據(jù)源的模型,即數(shù)據(jù)的表現(xiàn)形式,在JavaFX中通過(guò)定義類(lèi)來(lái)表述數(shù)據(jù)模型,類(lèi)中的數(shù)據(jù)屬性對(duì)應(yīng)了數(shù)據(jù)源的列名,并需要對(duì)所有的屬性提供public所修飾的set和get方法嗎,而且在這里需要對(duì)方法名提出嚴(yán)格的要求,需要是setXxx或getXxx的形式,如對(duì)于name屬性,需要提供setName和getName方法。而在定義ObservableList對(duì)象的數(shù)據(jù)類(lèi)型時(shí),需要與數(shù)據(jù)模型的類(lèi)型保持一致。
1.3 TableColumn
TableColumn定義了數(shù)據(jù)顯示在TableView中的列名,所以需要讓TableColumn與數(shù)據(jù)模型建立聯(lián)系,讓TableColumn中的每一個(gè)列對(duì)應(yīng)數(shù)據(jù)模型的一個(gè)屬性。
userNameTCloumn = new TableColumn<>( “用戶(hù)名” );
userNameTCloumn.setCellValueFactory( new PropertyValueFactory
在這里TableColumn對(duì)象userNameTCloumn定義為一個(gè)名為”用戶(hù)名”的列,通過(guò).setCellValueFactory方法與數(shù)據(jù)模型userInfo的userName建立了聯(lián)系。
最后通過(guò)TableView的getColumns().addAll(TableColumn)方法將TableColumn添加到TableView視圖中。
1.4 TableCell
TableCell作為T(mén)ableView中的一個(gè)數(shù)據(jù)單元而存在,常常用來(lái)加載非數(shù)據(jù)的內(nèi)容,例如加載一個(gè)超鏈接、按鈕或者一張圖片,可以強(qiáng)化TableView的功能。
2 重寫(xiě)方法,豐富TableView功能
上面我們已經(jīng)提到可以通過(guò)使用TableCell來(lái)強(qiáng)化視圖的功能,那么就需要重寫(xiě)相關(guān)方法來(lái)實(shí)現(xiàn)。在這里以顯示超鏈接為列子來(lái)說(shuō)明。
想要在列表視圖TableView中的數(shù)據(jù)單元格中顯示一個(gè)超鏈接,那么首先要操作超鏈接所對(duì)應(yīng)的TableColumn對(duì)象。
TableColumn對(duì)象通過(guò)調(diào)用setCellFactory方法,重寫(xiě)Callback
首先定義一個(gè)HyperlinkTableCell對(duì)象,用于承載一個(gè)超鏈接組件,通過(guò).getGraphic()方法得到一個(gè)超鏈接對(duì)象,在這里需要使用強(qiáng)制類(lèi)型轉(zhuǎn)換,在超鏈接對(duì)象上添加事件響應(yīng),通過(guò)setOnAction方法,定義點(diǎn)擊超鏈接時(shí)發(fā)生的事件響應(yīng),實(shí)現(xiàn)界面的跳轉(zhuǎn)。
程序的運(yùn)行結(jié)果如圖1所示。
可以看到數(shù)據(jù)表格中”查看”列是以一個(gè)超鏈接的形式進(jìn)行顯示,這個(gè)TableColumn對(duì)象是被重寫(xiě)的對(duì)象。除此之外還可以通過(guò)類(lèi)似的方式實(shí)現(xiàn)表格數(shù)據(jù)編輯、刪除等功能。
3 結(jié)語(yǔ)
JavaFX是一個(gè)具有光明未來(lái)的界面開(kāi)發(fā)工具,它的用途不僅局限于APP,在互聯(lián)網(wǎng),移動(dòng)開(kāi)發(fā)上也具有強(qiáng)大的功能,對(duì)于它的學(xué)習(xí)還需要更加深入,而本文的TableView作為其中一個(gè)相對(duì)復(fù)雜強(qiáng)大的組件應(yīng)用也顯得非常重要,它的用途也會(huì)被人們所重視。
參考文獻(xiàn)
[1]黃雁.JavaFX技術(shù)初探[J].電腦知識(shí)與技術(shù),2010,06(15):3978-3979.
[2]蔡學(xué)鏞.JavaFX精粹[J].程序員,2007,(11):111-113.