当前位置:  编程技术>java/j2ee

JavaFX之TableView的使用详解

    来源: 互联网  发布时间:2014-10-30

    本文导语:  TableView,算是一个很重要的控件,几乎随处可见,而且功能强大,数据展示效果良好。所以,在JavaFX中,我们自然而然也应该学习一下TableView的使用。 下面我们先看看TableView的效果图: 每一列都是一个TableColumn,我们可以直接...

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 data
            = FXCollections.observableArrayList();


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


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • JavaFX Designer for NetBeans
  • JavaFX Eclipse Plugin
  • 贪吃蛇游戏 JavaFX Snake
  • JavaFX企业级应用部署框架 FxObjects
  • JavaFX的PDF阅读器 JPedalFX
  • Eclipse的JavaFx插件 e(fx)clipse
  • Exadel JavaFX plug-in for Eclipse
  • RIA框架 JavaFX
  • JavaFX 扩展工具包 JFXtras
  • 基于 JavaFX 的代码编辑器 RichTextFX
  • 开源 JavaFX 实现 OpenJFX
  • JavaFX的数据管理组件 DataFX
  • 贪吃蛇游戏 JavaFX Snake iis7站长之家
  • javafx实现图片3D翻转效果方法实例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3