[英]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.