首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在TableView中显示ArrayList<List<String>>的值(JavaFX)

要在JavaFX的TableView中显示ArrayList<List<String>>的值,你需要将数据模型绑定到TableView,并确保每一行对应一个List<String>,每一列对应List<String>中的一个元素。以下是实现这一功能的步骤和示例代码:

基础概念

  • TableView: JavaFX中的一个控件,用于显示二维表格数据。
  • ObservableList: JavaFX中的一个列表,当列表内容发生变化时,能够自动通知绑定的控件进行更新。
  • ListChangeListener: 监听列表变化的接口。

相关优势

  • 动态更新: 使用ObservableList可以确保TableView在数据变化时自动更新。
  • 灵活性: 可以轻松地添加、删除或修改行和列。

类型与应用场景

  • 类型: 这里使用的是ArrayList<List<String>>,适用于存储表格数据。
  • 应用场景: 数据报表、日志查看、配置管理等需要以表格形式展示数据的场景。

示例代码

以下是一个简单的示例,展示如何在JavaFX的TableView中显示ArrayList<List<String>>的数据:

代码语言:txt
复制
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;

public class TableViewExample extends Application {

    public static class RowData {
        private final ObservableList<String> data;

        public RowData(ObservableList<String> data) {
            this.data = data;
        }

        public ObservableList<String> getData() {
            return data;
        }
    }

    @Override
    public void start(Stage primaryStage) {
        TableView<RowData> tableView = new TableView<>();

        // 假设这是你的ArrayList<List<String>>数据
        ArrayList<List<String>> arrayList = new ArrayList<>();
        arrayList.add(FXCollections.observableArrayList("A1", "B1", "C1"));
        arrayList.add(FXCollections.observableArrayList("A2", "B2", "C2"));
        arrayList.add(FXCollections.observableArrayList("A3", "B3", "C3"));

        ObservableList<RowData> rowDataList = FXCollections.observableArrayList();
        for (List<String> row : arrayList) {
            rowDataList.add(new RowData(FXCollections.observableArrayList(row)));
        }

        tableView.setItems(rowDataList);

        // 创建列并绑定到数据的相应属性
        for (int i = 0; i < arrayList.get(0).size(); i++) {
            final int columnIndex = i;
            TableColumn<RowData, String> column = new TableColumn<>("Column " + (i + 1));
            column.setCellValueFactory(cellData -> cellData.getValue().getData().get(columnIndex));
            tableView.getColumns().add(column);
        }

        Scene scene = new Scene(tableView, 300, 250);
        primaryStage.setTitle("TableView Example");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

可能遇到的问题及解决方法

  1. 数据更新不显示: 确保使用了ObservableList,并且在数据变化时调用了适当的更新方法。
  2. 列数不匹配: 在创建列时,确保列的数量与数据的最大列数相匹配。
  3. 性能问题: 对于大数据集,考虑使用分页或其他优化技术。

通过上述步骤和代码示例,你应该能够在JavaFX的TableView中成功显示ArrayList<List<String>>的数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Using JavaFX UI Controls 12 Table View

很多JavaFX SDK API种的类为在表格表单中呈现数据。在JavaFX 应用中对创建表格最重要的是TableView, TableColumn和TableCell这三个类。...在例子 12-1中, 表格组件被添加到 VBox  的布局容器中,然而你也可以直接将其添加到应用场景中。 例子 12-1定义了3列将用来存放地址簿的信息:一个联系人的 姓和名以及电子邮箱地址。...这样如果调用 getFirstName方法经返回firstName属性的值,可以通过调用setFirstName方法来为这个属性赋值 。 在数据模型已经在Person 类中呈现以后。...Person 的构造方法中,并添加到 data (observable list)中。...在例12-12中,数据行 hash map(哈希map) 展现了TableView对象的一个单行。

11.4K20
  • 优化在 SwiftUI List 中显示大数据集的响应效率

    考虑到当前的卡顿出现在进入视图的时刻,我们可以将查找问题的关注点集中在如下几个方面: Core Data 的性能( IO 或 惰值填充 ) 列表视图的初始化或 body 求值 List 的效能 Core...也就是当显示主界面菜单时,列表视图已经完成了实例的创建(可以通过在 ListEachRowHasID 的构造函数中添加打印命令得以证明),因此也不应是实例化列表视图导致的延迟。...在 SwiftUI 视图的生命周期研究[3] 一文中,我对 List 如何对子视图的显示进行优化做了一定的介绍。...当仅通过 ForEach 来指定显示标识时,List 会对这些视图的显示进行优化,仅在需要显示时才会对其进行实例化。...使用了 id 修饰符相当于将这些视图从 ForEach 中拆分出来,因此丧失了优化条件。 总之,当前在数据量较大的情况下,应避免在 List 中对 ForEach 的子视图使用 id 修饰符。

    9.3K20

    使用Javafx生成虚假手机号身份证号的小工具

    使用Javafx生成虚假手机号身份证号的小工具一、介绍在日常编码中,我们需要生成一些虚假的信息进行测试,其中就包括了手机号,身份证号那么如何生成这些虚假的手机号,和身份证号码呢我打算用javafx来编写一个生成虚假手机号...、虚假身份证号的小工具那么javafx是什么,简单的说,它是一个桌面端工具包集合,用于设计、创建、调试和部署富客户端程序虽然在桌面端不吃香,但比起第一语言就是java的我去学习其他语言来说,仅仅只是开发个小工具...,javafx足够了二、编码1)整体思路及页面布局我打算使用两个Tab,一个手机号、一个身份证号,来回切换在Tab内容中,放入一个按钮,一个表格当我点击按钮的时候,就会在表格中刷新虚假数据,来进行展示表格有两列...,设置了行内按钮,以及对表格内容进行了居中处理按钮点击,在fxml文件中,设置了两个按钮。...中,添加两个方法 public void generatePhone(ActionEvent actionEvent) { List list

    21950

    Using JavaFX UI Controls 18 超链接

    图18-1 展示了默认超链接实现的3中状态 图 18-1 超链接组件的3中状态 创建一个超链接 例 18-1 中展示创建超链接的代码片段 例18-1 典型的超链接 Hyperlink link...链接本地内容 在图18-2展示应用中从本地目录中渲染图片 图 18-2 显示图片 展示例 18-2的源代码: 例 18-2利用超链接浏览图片 import javafx.application.Application...因此图片数组中的对应的图片设置到selectedImage 变量中。当用户点击一个超链接,超链接将显示被访问过。你可以通过调用setVisited 方法来刷新超链接。...下一节的程序将展示既使用标题也使用图片来创建超链接和加载远程html页面。 链接远程内容 在你的JavaFx程序中,通过嵌入WebView 浏览器组件来渲染 HTML内容。...当点击其中一个超链接时,对应的值作为URL传给镶嵌的浏览器。

    1.5K50

    手拉手JavaFX场景

    ()值摆放每一个子节点setHgrow(hbox,Priority.ALWAYS);javafx有4中控件来表示多项数据ListView:列表TreeView:树TableView:表格TreeTableView...DEFAULT 光标默认值Cursor DISAPPEAR 光标消失Cursor CLOSED_HAND 光标闭合手Contextmenudemo 上下文菜单演示Cursor E _ RESIZE...javafx.application.Platform;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.image.Image...BorderPane的顶部和底部区域允许可调整大小的节点占用所有可用宽度。左边界区域和右边界区域占据顶部和底部边界之间的可用垂直空间。默认情况下,所有边界区域尊重子节点的首选宽度和高度。...放置在顶部,底部,左侧,右侧和中心区域中的节点的默认对齐方式如下:● 顶部: Pos.TOP_LEFT● 底部: Pos.BOTTOM_LEFT● 左侧: Pos.TOP_LEFT● 右侧: Pos.TOP_RIGHT

    17900

    5. Bean Validation声明式验证四大级别:字段、属性、容器元素、类

    本文将非常实用,因为将要讲述的是Bean Validation在4个层级上的验证方式,它将覆盖你使用过程中的方方面面,不信你看。...当把约束标注在Property属性上时,将采用属性访问策略来获取要验证的值。说白了:会调用你的Method来获取待校验的值。...形如List希望里面装的每个Room都是合法的,传统的做法是在for循环里对每个room进行验证: List beans = new ArrayList(); for (Room...rooms[1].finished只能为true,但你的值是: false rooms[1].finished只能为true,但你的值是: false 从日志中可以看出,元素的验证顺序是不保证的。...小贴士:在HV 6.0 之前的版本中,验证容器元素时@Valid是必须,也就是必须写成这样:List rooms才有效。

    1K20

    5. Bean Validation声明式验证四大级别:字段、属性、容器元素、类

    本文将非常实用,因为将要讲述的是Bean Validation在4个层级上的验证方式,它将覆盖你使用过程中的方方面面,不信你看。...当把约束标注在Property属性上时,将采用属性访问策略来获取要验证的值。说白了:会调用你的Method来获取待校验的值。...形如List希望里面装的每个Room都是合法的,传统的做法是在for循环里对每个room进行验证: List beans = new ArrayList(); for (Room...rooms[1].finished只能为true,但你的值是: false rooms[1].finished只能为true,但你的值是: false 从日志中可以看出,元素的验证顺序是不保证的。...小贴士:在HV 6.0 之前的版本中,验证容器元素时@Valid是必须,也就是必须写成这样:List rooms才有效。

    69910

    iOS操作属性列表plist(增删改查)

    引 iOS的存储方式之一——属性列表plist,还是经常见到的,可以很方便的用来管理一些有序的批量数据,特别是用来显示固定的内容到表单上时,不需要在代码中反复地繁琐编写数组,而可以在plist属性列表中进行可视化操作...,极为便捷,本文讲解如何创建和使用plist列表,并显示在表单上。...,在OS X的Resource中找到Property List类型文件: 创建后会得到一个plist文件,初始如下: 可以看到有三列:Key、Type、Value,分别表示键名、类型和值,这里的初始类型是一个...这里我们在数组内添加三条数据,类型为String型,值如图设置: 这样我们的plist属性列表就设置好了,这种可视化操作非常方便,但其实plist的本质是一个xml文件,我们可以在xml形式下查看修改也是一样的...变量,这样就可以在代码中操作这个Table View了,效果如图: 代码实现对plist的操作并显示到Table View: 1、准备工作 先打开.h文件,添加TableView的数据源和协议委托,并创建一个存储

    1.6K20

    【是时候升级java11了】 jdk11优势和jdk选择

    (list); //copyOf判断是否是不可变集合类型,如果是直接返回 System.out.println(list == copy); // true var list = new ArrayList...string>(); // 这里返回正常的集合 var copy = List.copyOf(list); // 这里返回一个不可变集合 System.out.println(list == copy...在java11中将java9标记废弃的Java EE及CORBA模块移除掉。...但是在Docker容器中运行Java应用程序一直存在一个问题,那就是在容器中运行JVM程序在设置内存大小和CPU使用率后,会导致应用程序的性能下降。这是因为Java应用程序没有意识到它正在容器中运行。...可以在容器中使用内存和CPU约束来直接管理Java应用程序,其中包括: 遵守容器中设置的内存限制 在容器中设置可用的CPU 在容器中设置CPU约束 JDK推荐 由于 Java 11 开始,Oracle

    3.2K10

    Avalonia:可信创.NET 跨平台UI,让JAVA失业者转.NET信创开发!

    6.4 样式和主题 Avalonia的样式系统允许你自定义应用程序的外观。你可以在App.axaml中定义全局样式,或者在individual控件中定义局部样式。...通过这个例子,我们可以看到MVVM模式如何在Avalonia中优雅地实现。ViewModel处理所有的业务逻辑和状态管理,而View只负责显示数据和捕获用户输入。...以下是一些值得关注的高级特性: 8.1 自定义控件 在Avalonia中创建自定义控件非常简单。你可以通过继承现有控件或从头开始创建来实现自定义控件。这类似于在JavaFX中创建自定义组件。...13.5 集合 JAVA: ListString> list = new ArrayList(); list.add("Item 1"); MapString, Integer> map =...new HashMap(); map.put("Key", 1); C# (Avalonia): var list = new Liststring>(); list.Add("Item 1")

    2K20
    领券