gpt4 book ai didi

java - 向下滚动并双击最后一个展开/折叠箭头时,TreeTableView 项目消失

转载 作者:行者123 更新时间:2023-12-04 13:55:12 26 4
gpt4 key购买 nike

TreeTableView 一起工作时我意识到当您向下滚动表格并双击最后一个展开/折叠箭头时,所有项目都会消失。但是,当您再次滚动时,所有项目都会重新出现。当然,当你有足够的元素时会发生这种情况,所以垂直 ScrollBar活跃。
有没有人遇到过这个问题?这是一个已知的问题?
简单示例:

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

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.scene.layout.StackPane;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;

public class App extends Application {

@Override
public void start(Stage stage) {

TreeTableView<List<String>> table = new TreeTableView<>();
table.setMaxHeight(250);

TreeTableColumn<List<String>, String> colCity = new TreeTableColumn<>("City");
TreeTableColumn<List<String>, String> colCountry = new TreeTableColumn<>("Country");

colCity.setCellValueFactory(c -> new SimpleStringProperty(c.getValue().getValue().get(0)));
colCountry.setCellValueFactory(c -> new SimpleStringProperty(c.getValue().getValue().get(1)));

table.getColumns().setAll(colCity, colCountry);

TreeItem<List<String>> root = new TreeItem<>(Arrays.asList("Root", ""));
root.setExpanded(true);

for (int i = 0; i < 10; i++) {
TreeItem<List<String>> item = new TreeItem<>(List.of("London", "UK"));
item.getChildren().add(new TreeItem<>(List.of("New York", "US")));
item.setExpanded(true);
root.getChildren().add(item);
}

table.setRoot(root);

Scene scene = new Scene(new StackPane(table));

stage.setScene(scene);

stage.show();
}

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

}
我已经测试了这段代码:
  • 硬件/操作系统:MacBookPro16,1/macOS Catalina 10.15.6
  • Java:11.0.2、14.0.1
  • JavaFX:11.0.2、12.0.2、13.0.2、14.0.2.1、15
  • 最佳答案

    自 JavaFX 16 以来,此问题已解决。但是,这里有一个适用于旧 JavaFX 版本的 hacky 解决方案。
    它的工作原理是向 expandedItemCountProperty() 添加一个监听器。强行TreeTableView在需要时刷新:

    table.expandedItemCountProperty().addListener(e -> {

    VirtualFlow<?> virtualFlow = (VirtualFlow<?>) table.lookup(".virtual-flow");

    if (virtualFlow != null && virtualFlow.getFirstVisibleCell() != null) {

    int firstVisibleIndex = virtualFlow.getFirstVisibleCell().getIndex();
    int visibleCells = virtualFlow.getLastVisibleCell().getIndex() - firstVisibleIndex;

    if (firstVisibleIndex > visibleCells) {
    table.refresh();
    }
    }
    });
    注意:使用问题中的示例进行测试。

    关于java - 向下滚动并双击最后一个展开/折叠箭头时,TreeTableView 项目消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63836998/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com