我正在尝试改进固定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坐标?