JavaFx:滚动单元在哪里“移动”?

时间:2019-04-23 10:25:01

标签: java javafx tableview javafx-8 skin

我正在尝试改进固定TableColum的实现,因此当用户滚动固定列时,该列将被忽略,并且每次都保持可见。

当前的实现很脏:

public class FixedTableCell<S, T> extends TableCell<S, T> {

    {
        Platform.runLater(() -> {
            ScrollBar scrollBar = TableViewUtil.getHorizontalScrollBar(getTableView());
            scrollBar.valueProperty().addListener(TableViewUtil.xCoordinateChangeListener(this));
        });
    }

    @Override
    protected void updateItem(T item, boolean empty) {
        super.updateItem(item, empty);
        if (empty || item == null) {
            setText(null);
            setGraphic(null);
        } else {
            setText(item.toString());
        }
        Platform.runLater(() -> {
            ScrollBar scrollBar = TableViewUtil.getHorizontalScrollBar(getTableView());
            TableViewUtil.setNodeFixed(this, scrollBar.getValue());
        });
    }
}

setNodeFixed

public static <T extends Node> void setNodeFixed(T node, double value) {
    node.toFront();
    node.setTranslateX(value);
}

我通过为tableView实现自定义Skin来修复标题部分,并在TableViewSkin#horizontalScroll中设法将标题的translateX设置为滚动条的值。

但是我想知道单元格的X位置在哪里?

我试图创建一个新的CellSkin,但那里什么也没有,在这种TableView方法中,我无法访问单元格,因此我现在随机寻找与{{ 1}}协调单元格的更改,但是我真的没有找到合适的方法来完成它。

问题是:在哪里{/该方法是什么,当X水平滚动时,该方法负责设置单元格的X坐标?

0 个答案:

没有答案