在滚动 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;
}
Table
class中的measure item代码(TableViewer
使用)一旦变大就永远不会减少行的大小,所以没有办法改变这个。
度量代码是 Table.sendMeasureItem
,但无法覆盖。这里的代码是特定于平台的,但我检查了 Windows 和 macOS 版本(不确定 Linux/GTK 版本)。
我确实有解决这个问题的方法,但它依赖于平台,我只有 macOS。
我有一个 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;
}
Table
class中的measure item代码(TableViewer
使用)一旦变大就永远不会减少行的大小,所以没有办法改变这个。
度量代码是 Table.sendMeasureItem
,但无法覆盖。这里的代码是特定于平台的,但我检查了 Windows 和 macOS 版本(不确定 Linux/GTK 版本)。
我确实有解决这个问题的方法,但它依赖于平台,我只有 macOS。