具有可变行高的SWT表:适用于Linux,但不适用于Mac/Windows

jas*_*ram 6 java swt jface

问题:我需要一个具有可变行高的SWT表(JFace TableViewer).事实上,我在我的开发机器(运行Ubuntu 10.10)上解决了这个问题.不幸的是,这在Windows和Mac上都不起作用.

最初,我以为我没有正确使用这些库.但到现在为止,我担心我想要做的事情在Windows上根本不可能.我希望有人能说服我.

重现:我没有在这里提供我的代码,而是构建了一个简单的程序来重现问题.我从以下Snipplet开始:

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上,所有行都必须是相同的高度.这对我来说是一个显而易见的事.任何人都可以证实这一点,甚至更好,提供一种解决方法吗?

谢谢!

the*_*man 2

我可以确认在 Win32 上表行只能具有相同的高度。例如,请参阅此错误报告。bug 148039 中的解决方法使得setItemHeight()可以访问,但这并没有改变此限制。