一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - JavaFX之TableView的使用詳解

JavaFX之TableView的使用詳解

2019-10-24 16:45java開發網 JAVA教程

這篇文章主要介紹了JavaFX之TableView的使用,有需要的朋友可以參考一下

TableView,算是一個很重要的控件,幾乎隨處可見,而且功能強大,數據展示效果良好。所以,在JavaFX中,我們自然而然也應該學習一下TableView的使用。

下面我們先看看TableView的效果圖:

JavaFX之TableView的使用詳解

每一列都是一個TableColumn,我們可以直接創建也可以在JavaFX Scene Builder中創建好。

TableView的數據填充,需要一個ObservableList。其中需要一個類來做數據填充。

下面看看我們數據填充的類:

 

復制代碼代碼如下:


import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;

 

/**
 *
 * @author wing
 */
public final class DownloadData {
       private final SimpleStringProperty fileName = new SimpleStringProperty();
       private final SimpleStringProperty status = new SimpleStringProperty();
       private final SimpleStringProperty dlSpeed = new SimpleStringProperty();
       private final SimpleDoubleProperty progress = new SimpleDoubleProperty();
       private final SimpleStringProperty downloadSize = new SimpleStringProperty();      
       private final SimpleStringProperty dlPercent = new SimpleStringProperty();    
       private String uuid;

         public DownloadData(String filename, double progress) {
           setFileName(filename);
           setProgress(progress);
       }     

       public DownloadData(String status, String filename, String dlSpeed, double progress) {
           setStatus(status);
           setFileName(filename);
           setDlSpeed(dlSpeed);
           setProgress(progress);
       }
    /**
     * @return the fileName
     */
    public String getFileName() {
        return fileName.get();
    }

    /**
     * @param fileName the fileName to set
     */
    public void setFileName(String fileName) {
        this.fileName.set(fileName);
    }

    public SimpleStringProperty fileNameProperty(){
        return fileName;
    }

    /**
     * @return the status
     */
    public String getStatus() {
        return status.get();
    }

    /**
     * @param status the statusto set
     */
    public void setStatus(String status) {
        this.status.set(status);
    }

   public SimpleStringProperty statusProperty(){
        return status;
    }

    /**
     * @return the String
     */
    public String getDlSpeed() {
        return dlSpeed.get();
    }

    /**
     * @param dlSpeed the dlSpeed to set
     */
    public void setDlSpeed(String dlSpeed) {
        this.dlSpeed.set(dlSpeed);
    }

    public SimpleStringProperty dlSpeedProperty(){
        return dlSpeed;
    }

    /**
     * @return the progress
     */
    public double getProgress() {
        return progress.get();
    }

    /**
     * @param progress the progress to set
     */
    public void setProgress(double progress) {
        this.progress.set(progress);
    }

    public SimpleDoubleProperty progressProperty(){
        return progress;
    }   

    public String getDownloadSize() {
        return downloadSize.get();
    }

    public void setDownloadSize(String downloadSize) {
        this.downloadSize.set(downloadSize);
    }

    public SimpleStringProperty downloadSizeProperty(){
        return downloadSize;
    }

    public String getDlPercent() {
        return dlPercent.get();
    }

    public void setDlPercent(String dlPercent) {
        this.dlPercent.set(dlPercent);
    }

    public SimpleStringProperty dlPercentProperty(){
        return dlPercent;
    }

    public String getUUID() {
        return uuid;
    }

    public void setUUID(String uuid) {
        this.uuid = uuid;
    }  
}

 

記住,用作數據填充的類,一定要用JavaFX的Property機制,可以進行數據綁定,這樣在我們改變ObservableList的時候,TableView的數據才會實時刷新。

 

復制代碼代碼如下:


private final ObservableList<DownloadData> data
            = FXCollections.observableArrayList();

 


ObservableList<TableColumn> observableList = mDownloadTable.getColumns();

observableList.get(0).setCellValueFactory(new PropertyValueFactory("status"));
observableList.get(1).setCellValueFactory(new PropertyValueFactory("fileName"));
observableList.get(2).setCellValueFactory(new PropertyValueFactory("dlSpeed"));
observableList.get(3).setCellValueFactory(new PropertyValueFactory("downloadSize"));
observableList.get(4).setCellValueFactory(new PropertyValueFactory("progress"));
observableList.get(4).setCellFactory(ProgressBarTableCell.forTableColumn());
observableList.get(5).setCellValueFactory(new PropertyValueFactory("dlPercent"));

mDownloadTable.setItems(data);

 

我們通過TableView.getColumns來獲取TableView的所有列。

CellValueFactory指的是TableView每一列里填充的數據。我們這里簡單的使用PropertyValueFacotry。后面的要對應你DownloadData中的Property屬性名。

CellFactory我們可以指定TableView中某一個Cell的視圖類型。大家可以看到我用到了個ProgressBar。

另外CellFactory,JavaFX中自帶部分的CellFactory,詳細的大家可以在javafx.scene.control.cell包中找到。

接著我們通過創建DownloadData,設置數據,并添加到ObservableList中即可。

如下圖所示:

JavaFX之TableView的使用詳解

上面是TableView的數據填充。

另外,JavaFX中的事件也不像Java或者Android里面用onItemClick之類的來執行某一項的點擊。

JavaFX中的控件的很多事件有著鮮明的特色,就是使用Property的ChangeListener來執行。

如下:

 

復制代碼代碼如下:


mMenuTree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
        mMenuTree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {

 

            @Override
            public void changed(ObservableValue ov, Object t, Object t1) {
                int index = mMenuTree.getSelectionModel().getSelectedIndex();
                switch (index) {
                    case 1:   //所有任務
                        refreshTableData(0, 1, 2);
                        break;
                    case 2:   //正在下載
                        refreshTableData(0);
                        break;
                    case 3:  //已完成
                        refreshTableData(2);
                        break;
                    case 4:  //垃圾箱
                        refreshTableData(-1);
                        break;
                }
            }
        });

 

這里是TreeView的事件,通過監聽selectItemProperty的改變來做相應的操作,同理,TableView也是一樣的通過監聽selectXXXProperty屬性來操作Item的點擊等事件。

要下班了,這一節就暫時到這里了。

文章中用到的一些圖片,是最近沒事做的時候用JavaFX練手的工具。

不過由于JavaFX更新進度較慢,最后可能會繼續其他的開發和學習。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 极品蜜桃臀美女啪啪 | 九九精品视频在线观看 | 国产在线精品亚洲第一区香蕉 | 国产三及 | 日本伊人久久 | 日本高清在线观看天码888 | 亚洲精品在线网址 | 亚洲精品有码在线观看 | 欧美兽皇另类 | 美女天天操 | 国产成人精品一区二三区在线观看 | 国产成人+亚洲欧洲 | 欧美s级人做人爱c视频 | 羞羞视频麻豆 | 亚洲国产精品无码中文字满 | 午夜毛片在线观看 | 无限观看社区在线视频 | 日本人泡妞18xxⅹ | 亚洲国产天堂久久精品网 | 茄子香蕉视频 | 亚洲小视频 | 精品欧美小视频在线观看 | 波多野结衣xxxxx在线播放 | 掀开奶罩边躁狠狠躁软学生 | 99午夜高清在线视频在观看 | 四虎免费在线视频 | 91九色最新地址 | 男同桌扒开女同桌胸罩喝奶 | 忘忧草在线| 欧美亚洲天堂网 | 国产二区视频在线观看 | 91亚洲精品第一综合不卡播放 | 精品99一区二区三区麻豆 | 国产成人精品男人的天堂538 | 欧美日韩一二三区免费视频观看 | 国产成人高清亚洲一区91 | 疯狂刺激的3p国产在线 | 精品国内自产拍在线视频 | 99热久久这里只精品国产www | 欧美三茎同入 | 成人黄色免费网站 |