当前位置: 移动技术网 > IT编程>开发语言>Java > JavaFX之TableView的使用详解

JavaFX之TableView的使用详解

2019年07月22日  | 移动技术网IT编程  | 我要评论
tableview,算是一个很重要的控件,几乎随处可见,而且功能强大,数据展示效果良好。所以,在javafx中,我们自然而然也应该学习一下tableview的使用。 下面

tableview,算是一个很重要的控件,几乎随处可见,而且功能强大,数据展示效果良好。所以,在javafx中,我们自然而然也应该学习一下tableview的使用。

下面我们先看看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中即可。

如下图所示:

上面是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更新进度较慢,最后可能会继续其他的开发和学习。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网