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更新进度较慢,最后可能会继续其他的开发和学习。
上一篇: Android开发之删除项目缓存的方法
下一篇: Android下SDL2实现五子棋游戏
推荐阅读
-
JavaFX之TableView的使用详解
-
详解2016 cocoapods的安装和使用以及版本升级遇到的问题
-
详解 Java中日期数据类型的处理之格式转换的实例
-
winform 使用Anchor属性进行界面布局的方法详解
-
iOS自学笔记之XIB的使用教程
-
Java数据库连接PreparedStatement的使用详解
-
用 Composer构建自己的 PHP 框架之使用 ORM,composerorm_PHP教程
-
Android开发之使用通知栏显示提醒信息的方法
-
详解使用pymysql在python中对mysql的增删改查操作(综合)
-
详解ios中的SQL数据库文件加密 (使用sqlcipher)