在滚动 table 时调整 JFace TableViewer 中的行高

Adapting row height in JFace TableViewer as I scroll my table

我有一个 JFace TableViewer,每个列都有一个 ILazyContentProvider 和一个 StyledCellLabelProvider,我主要从 https://wiki.eclipse.org/JFaceSnippets#Snippet006TableMultiLineCells 中获取它以启用多行行。当我打开 table 时,所有行都按预期具有占据最多 space 的行的高度。当我向下滚动 table 时,如果一行占用更多 space,行高将按预期更改。但是,这目前在另一个方向上不起作用,即,如果我滚动以使当前显示的行占用更少 space,所有行仍然具有整个 table 中最大行的高度.

有办法解决吗?不知何故似乎有内容的记忆,懒惰的内容提供者应该忘记?

这是我在 StyledCellLabelProvider 中的测量方法:

@Override
protected void measure(Event event, Object element) {
    event.width = viewer.getTable().getColumn(event.index).getWidth();
    if (event.width == 0) {
        return;
    }
    TableEntryData rowData = (TableEntryData) element;
    TableCellData cellData = getCellData(rowData, event.index);
    int height = event.gc.textExtent(SOME_STRING).y; // Height of a written string on one line.
    int lines = cellData.getPoints().size();
    event.height = height * lines;

    event.gc.dispose();
}

这是我的大部分 ILazyContentProvider:

@Override
public void updateElement(int index) {
    viewer.replace(entries.get(index), index);

}

@SuppressWarnings("unchecked") // TODO:
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    this.entries = (List<TableEntryData>) newInput;
}

Tableclass中的measure item代码(TableViewer使用)一旦变大就永远不会减少行的大小,所以没有办法改变这个。

度量代码是 Table.sendMeasureItem,但无法覆盖。这里的代码是特定于平台的,但我检查了 Windows 和 macOS 版本(不确定 Linux/GTK 版本)。

我确实有解决这个问题的方法,但它依赖于平台,我只有 macOS。