繁体   English   中英

滚动表格时在 JFace TableViewer 中调整行高

[英]Adapting row height in JFace TableViewer as I scroll my table

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

有没有办法解决这个问题? 不知何故,懒惰的内容提供者应该忘记的内容似乎有 memory?

这是我在 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;
}

Table class(由TableViewer使用)中的度量项代码一旦变大就永远不会减小行的大小,因此无法更改。

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

我确实有办法解决这个问题,但它依赖于平台,我只为 macOS 提供了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM