`

JavaFX之TableView的使用

 
阅读更多

声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处:http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com

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

----------------------------------------------------

本博客文章原创类别的均为个人原创,版权所有。转载请注明出处:http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com


分享到:
评论

相关推荐

    javafx_tableview设置背景透明和滚动条

    使用`.table-view`选择器来选择`TableView`元素,并设置`-fx-background-color`为`transparent`。 ```css .table-view { -fx-background-color: transparent; } ``` 接下来,我们将关注滚动条的透明设置。JavaFX...

    javafx 2.0 tableview 实例

    这个"javafx 2.0 tableview 实例"是一个很好的学习资源,它可以帮助开发者了解如何在JavaFX应用程序中有效地使用TableView。 首先,让我们详细了解一下JavaFX中的TableView组件。TableView是一个可定制的数据视图...

    基于JavaFx TableView的人员增删查改界面

    3. **ObservableList**:在JavaFX中,为了与TableView绑定数据,通常会使用ObservableList。这是一种特殊的列表,当其内容发生变化时,会自动通知TableView,从而实时更新界面。 4. **数据模型**:在人员管理的例子...

    javafx 2.0 tableView 实例

    在JavaFX 2.0版本中,`TableView`是一个核心的组件,用于展示结构化的数据集,类似于传统的电子表格。下面我们将深入探讨`TableView`的使用方法,包括数据列的绑定。 `TableView`是JavaFX中的一个视图类,它允许...

    JavaFX tableview获取数据demo

    JavaFX的一个demo,带checkbox的tableview,选中一行获取所选中行的数据。

    JavaFX_TableView_Demo:JavaFX_TableView_Demo包括在表中添加按钮图片以及事件监听

    在这个项目"JavaFX_TableView_Demo"中,我们将探讨如何使用JavaFX的TableView组件来展示数据,并且如何在表格中添加按钮和图片,同时实现对这些元素的事件监听。 1. **JavaFX TableView组件**:TableView是JavaFX中...

    JavaFX2.0_表格框TableView

    在JavaFX 2.0中,TableView是一种强大的控件,用于以表格的形式展示数据。它提供了灵活的布局和丰富的功能,使开发者能够轻松地构建数据驱动的用户界面。以下是关于JavaFX 2.0表格框TableView及其核心组件的详细解释...

    JavaFX+Jfoenix 学习笔记(三)--TableView数据表格源码

    在"JavaFX+Jfoenix 学习笔记(三)--TableView数据表格源码"中,我们将重点讨论如何使用JavaFX的TableView组件结合JFoenix来展示和操作数据。TableView是JavaFX中的一个核心组件,它允许用户以表格的形式查看和操作...

    JAVAFX运用tableview制作通讯录系统

    新手写的,不是很好

    tableView横向滚动

    在`viewDidLayoutSubviews`中,你需要更新UITableView的contentSize,使其等于所有单元格宽度之和。例如: ```swift override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let ...

    tableView自动调节cell高度

    tableView.rowHeight = UITableView.automaticDimension // 使用自动尺寸 ``` 综上所述,实现“tableView自动调节cell高度”主要涉及以下几个步骤: 1. 在cell的子视图中使用Auto Layout设置约束。 2. 重写`...

    jAVAfx的增删改查demo文件

    - `TableView`是JavaFX中的一个核心组件,用于显示二维数据表格。 - 可以通过设置`TableColumn`来定义列,每个`TableColumn`对应一个数据字段。 - 支持数据绑定,可以将数据模型(如`ObservableList`)与表格视图...

    javafx tableview鼠标触发更新属性详解

    在 JavaFX 中,我们可以使用鼠标触发事件来更新 TableView 的内容。例如,我们可以在鼠标滑过单元格时更新其内容,或者在鼠标点击单元格时触发编辑事件。下面是一个简单的示例代码: ```java public class ...

    javafxtableviewjdbc:Tableview 使用 Javafx 填充 mysql 数据库中的数据

    在JavaFX中,`TableView`是一个强大的组件,用于展示数据集,它允许用户与数据进行交互,例如排序、筛选和编辑。本教程将探讨如何利用JavaFX与JDBC(Java Database Connectivity)结合,从MySQL数据库中获取数据并...

    JavaFX TreeView数据库加载Node的实例

    JavaFX的TreeView组件是用于构建层次结构数据视图的强大工具,它可以用来展示树形结构的信息,如文件系统、组织结构等。在这个实例中,我们将深入探讨如何将数据库中的数据加载到JavaFX的TreeView中,创建一个动态的...

    javaFX TableView

    TableView修改表格行颜色,定制表格

    FxMarkdownEditor-基于JavaFx的Markdown编辑器

    【FxMarkdownEditor】是一款基于JavaFX技术开发的Markdown编辑器,专为喜欢使用Markdown语言进行文本编辑的用户设计。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构...

    JavaFx+Mysql+SceneBuilder实现的学生成绩管理系统,是吸纳了增删改查,利用了tableview组件

    javafx连接mysql数据库实现的一个简单的学生成绩管理系统。...其中实现了tableview组件查询显示成绩。内附有数据库建表示例,代码较为清晰,基本能够满足javafx课程大作业要求。欢迎大家交流参考学习。123

    TableViewSample

    `TableViewSample`是一个典型的例子,展示了如何使用JavaFX绑定数据到TableView控件,从而实现数据的动态展示和交互。在这个项目中,我们主要关注两个核心概念:JavaFX的TableView控件以及数据绑定。 1. **JavaFX的...

Global site tag (gtag.js) - Google Analytics