当前位置: 首页 > 知识库问答 >
问题:

如何使用JavaFX TableView显示基于列的数据集

竺国兴
2023-03-14

我试图从Swing切换到JavaFX,但TableView出现了问题。

我在内存中有一个通用的基于列的数据结构,比如List

其中数据列是一个表列,它是基元数组的包装器。对于JTable,我已经实现了一个自定义TableModel来处理这个数据结构。

我在TableView中看到的一切都是基于行而不是列的列表。

如何使用TableView可视化这些数据,而不将其复制到基于行的数据结构中?谢谢你。


共有1个答案

诸葛嘉熙
2023-03-14

下面是一个非常简单的例子,它使用基于列的数据;也许这会给你足够的时间继续。本例中的基本思想是使表类型为整数,因此每个列的值由一个工厂计算,该工厂只需将索引映射到数据列结构中,并检索索引的相应值。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javafx.application.Application;
import javafx.beans.property.ReadOnlyIntegerWrapper;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class ColumnBasedTable extends Application {

    @Override
    public void start(Stage primaryStage) {
        final int numRows = 20 ;
        final int numCols = 12 ;

        List<DataColumn<Integer>> data = new ArrayList<>();

        for (int colIndex = 1; colIndex <= numCols; colIndex++) {
            Integer[] colData = new Integer[numRows];
            for (int rowIndex = 0; rowIndex < numRows; rowIndex++) {
                colData[rowIndex] = (rowIndex+1)*colIndex ;
            }
            DataColumn<Integer> dataColumn = new DataColumn<>(colData);
            data.add(dataColumn);
        }

        TableView<Integer> table = new TableView<>();
        for (int i=0; i<numRows; i++) {
            table.getItems().add(i);
        }

        for (int i=0; i<numCols; i++) {
            TableColumn<Integer, Number> col = new TableColumn<>(Integer.toString(i+1));
            final int colIndex = i ;
            col.setCellValueFactory(cellData -> {
                int rowIndex = cellData.getValue();
                DataColumn<Integer> dataColumn = data.get(colIndex);
                return new ReadOnlyIntegerWrapper(dataColumn.getData(rowIndex));
            });
            table.getColumns().add(col);
        }

        primaryStage.setScene(new Scene(new BorderPane(table), 600, 400));
        primaryStage.show();
    }

    public static class DataColumn<T> {
        private final T[] data ;
        public DataColumn(T[] data) {
            this.data = Arrays.copyOf(data, data.length);
        }
        public T getData(int index) {
            return data[index];
        }
        public int getSize() {
            return data.length ;
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 类似资料:
  • 嗨,我正在创建一个C#程序,用户可以登录和预订目的地的公共汽车座位,我有这个程序,用户可以插入/更新/删除数据,但我希望数据只显示当前登录的数据,这是我的代码下面。 此函数位于主仪表板类中,它在其中向dataviewgrid显示SAITS表 这是我的数据库表,一旦用户登录,我想做的就是按userID显示每个seatID,seatID是这个表的主键,userID是链接到userdata表的外键。

  • 我如何才能显示一个包含姓名、性别和出生日期的数据表,而只显示今天出生的人? 使用来自jdbc的java连接。 也就是说,我有一张分别于2015年6月15日、2015年5月13日和2015年6月17日出生的3个孩子的表格。 逻辑执行后,只有一个DOB在2015年6月17日(今天的日期)的孩子会出现在桌面上。

  • 问题内容: 输出显示如下: 但我想展示 解 问题答案: 尝试在像这样的函数之后设置字符编码:

  • 我正在创建具有下拉列表视图的页面。现在我在列表视图中显示完整数据。如果我想要任何特定的日期数据,那么我需要做什么。请帮我解决这个问题。下面是我正在获取的JSON。 下面是代码

  • 问题内容: 在我们的Java应用程序屏幕之一上,我们希望在类似Excel的电子表格组件上显示从Excel文件加载的数据。 该组件必须能够评估电子表格中的公式,并且还必须像加载的Excel文件一样保留常规单元格格式。我们必须能够以编程方式更改电子表格中的单元格值。 自由是一件好事。 您会建议使用任何Java库吗? 问题答案: Apache POI。它是免费的, 但是您不能在此库的帮助下评估形式。 B

  • 本文向大家介绍Java基于JDBC连接数据库及显示数据操作示例,包括了Java基于JDBC连接数据库及显示数据操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java基于JDBC连接数据库及显示数据操作。分享给大家供大家参考,具体如下: 1. 导入jdbc包 java要连接MySQL数据库需要用到JDBC工具(mysql-connector-java-5.1.39-bin.jar)