问题:我需要一个具有可变行高的 SWT 表(JFace TableViewer)。事实上,我在我的开发机器上解决了这个问题(运行 Ubuntu 10.10)。不幸的是,这在 Windows 和 Mac 上都不起作用。
最初,我以为我没有正确使用这些库。但现在我担心我想做的事情在 Windows 上根本不可能实现。我希望这里有人能说服我。
重现:我没有在这里提供我的代码,而是构建了一个最小的程序来重现问题。我从以下代码片段开始:
http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/ Snippet049StyledCellLabelProvider.java http://git.eclipse.org/c/platform/eclipse.platform.ui.git/tree/examples/org.eclipse.jface.snippets/Eclipse%20JFace%20Snippets/org/eclipse/jface/snippets/viewers/Snippet049StyledCellLabelProvider.java
我修改了 update() 方法,为目录生成两行文本,为文件生成一行文本(以模拟行高可变的环境):
...
if (file.isDirectory()) {
cell.setText(styledString.toString() + "\n"
+ styledString.toString());
cell.setImage(IMAGE1);
} else {
cell.setImage(IMAGE2);
}
...
这在 Linux 上按预期工作,但在 Windows 上所有行都具有相同的高度。具体来说,只有一根线可见。
接下来,我试图通过使measure() 更加智能来帮助SWT。所以我像这样重写了measure():
protected void measure(Event event, Object element) {
if (((File) element).isDirectory()) {
event.height = 32;
} else {
event.height = 16;
}
super.measure(event, element);
}
结果:所有行的高度均为 32。同样,这在 Linux 上按预期工作。
我担心的是,在 Windows 上,所有行都必须具有相同的高度。这对我来说将是一场精彩的表演。任何人都可以证实这一点,或者更好的是,提供解决方法吗?
Thanks!