JavaFX Span Tableview 通过 MapEntries 合并单元格

2024-04-25

你好,我有以下地图:

Map<String,ArrayList>

我想要一个像这样的TableView

|--------------|-----------|
|ArrayList e1  | String e  |
|--------------|           |
|ArrayList e2  |           |
|--------------|           |
|ArrayList e3  |           |
|--------------|-----------|
|ArrayList x1  | String x  |
|--------------|           |
|ArrayList x2  |           |
|--------------|-----------|

我已经尝试过几个 CellValueFactory 回调,但我不知道如何读出我的值以及跨越或合并这些单元格。

此致


我通过为第一列创建一个 CellValueFactory 来解决这个问题,我将 ArrayList 作为字符串获取,如下所示:

    arrayListCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Map.Entry<PropertyDifference, DifferenceFileList>, String>, ObservableValue<String>>() {
        @Override
        public ObservableValue<String> call(TableColumn.CellDataFeatures<Map.Entry<PropertyDifference, DifferenceFileList>, String> p) {
            return new SimpleStringProperty(Arrays.toString(p.getValue().getValue().getFileList().toArray()));
        }
    });

结果是:

|--------------|-----------|
|[e1,e2,e3]    | String e  |
|--------------|-----------|
|[x1,x2]       | String x  |
|--------------|-----------|

这处理列条目的值。现在我考虑了一种进一步的表示形式,并为此使用了 CellFactory,然后格式化单元格。

    Callback<TableColumn<Map.Entry<PropertyDifference, DifferenceFileList>, String>, TableCell<Map.Entry<PropertyDifference, DifferenceFileList>, String>> tableCellList = new Callback<TableColumn<Map.Entry<PropertyDifference, DifferenceFileList>, String>, TableCell<Map.Entry<PropertyDifference, DifferenceFileList>, String>>() {
        @Override
        public TableCell<Map.Entry<PropertyDifference, DifferenceFileList>, String> call(TableColumn<Map.Entry<PropertyDifference, DifferenceFileList>, String> param) {
            return new TableCell<Map.Entry<PropertyDifference, DifferenceFileList>, String>() {
                @Override
                protected void updateItem(String item, boolean empty) {
                  if (item != null) {
                      item = item.replace("[", "") .replace("]", "");
                      ObservableList<String> items = FXCollections.observableArrayList(item.split(","));
                      final ListView<String> listView = new ListView<String>();

                      listView.setItems(items);

                      setGraphic(listView);
                  }
                }
            };
        }
    };

    arrayListCol.setCellFactory(tableCellList);

这将替换“[”和“]”字符,并使用“,”作为分割分隔符将“字符串”ArrayList 分割为 ObservableList。

ObservableList 用于 ListView,然后通过以下行添加到单元格:

setGraphic(listView);

.

|------|-----------|
|  e1  | String e  |
|  e2  |           |
|  e3  |           |
|------|-----------|
|  x1  | String x  |
|  x2  |           |
|------|-----------|

有什么不清楚的吗? -> 只是评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX Span Tableview 通过 MapEntries 合并单元格 的相关文章

随机推荐