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

时间:2010-11-02 21:04:17

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

谢谢!

3 个答案:

答案 0 :(得分:4)

我也遇到了这个问题 - 需要一个可以支持不同高度的单元格的SWT表小部件。正如.duckman所说,Win32表行无法做到这一点。我们最终使用了KTable小部件。它不使用本机OS表。

http://sourceforge.net/projects/ktable/

它对我们有用,但它有一些怪癖。幸运的是,源代码很容易修改,以满足您的需求。

答案 1 :(得分:2)

我可以确认在Win32表行上只能有相同的高度。请参阅示例this bug report。错误148039的解决方法使setItemHeight()可以访问,但这不会改变此限制。

答案 2 :(得分:1)

我们使用星云网格小部件。 http://www.eclipse.org/nebula/widgets/grid/grid.php

非常灵活。在我们的例子中,我们使用它来获得更多的html样式表功能以及treeViewer小部件。

截图 alt text