我有一棵树,其中填充了可能有图像的 TreeItems(带有缩略图的行)。我用 MeasureItem 监听器调整了行高,一切都很好。
但是,现在我想让这种变化动态化。我检查一行是否应该有图像,如果当前列出的行中的任何行有应该显示的图像,我将行高设置为 180px,并且所有行都具有该高度。如果没有包含图像的行,则行高应为 25px。
问题是,如果在任何时候将行高设置为 180 像素,我都无法将其更改回 25 像素。我的代码看起来像这样(简化):
//this check is run on each page of paginated results fetched from DB
rowHeight=25;
for(Result r : results){
if(r.hasImage()){
rowHeight=180;
break;
}
}
// resize the row height using a MeasureItem listener
tree.addListener(SWT.MeasureItem, new Listener() {
public void handleEvent(Event event) {
event.height = rowHeight;
}
});
//added 'event.height=rowHeight' here just to check if it will draw as I want
tree.addListener(SWT.EraseItem, new Listener() {
public void handleEvent(Event event) {
if(event.index!=ColumnType.SCREENSHOT.toIndexNum()){
event.detail &= ~SWT.FOREGROUND;
}
event.height=rowHeight;
}
});
rowHeight 变量设置为应有的值,MeasureListener 中的“event.height”也设置为相同的值。但仍然不想降低高度。在结果的每一页上,我都用tree.removeAll()
. 也许我应该处置并重新创建表/树(我不想这样做)?
那么,知道该怎么做吗?
PS 不要混淆,我不需要行的各种高度,我知道在 Windows/Mac 下这是不可能的。我只需要一种重置高度的方法。