具有可变行高的SWT表:在Linux上运行,但不在Mac / Windows上运行

问题:我需要一个具有可变行高的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(事件事件,对象元素){
     if(((File)element).isDirectory()){
         event.height = 32;
     } else {
         event.height = 16;
     }
     super.measure(事件,元素);
 } 

结果:所有行都具有高度32.同样,这在Linux上按预期工作。

我担心,在Windows上,所有行的高度必须相同。 这对我来说是一个噱头。 任何人都能证实这一点,甚至更好,提供一种解决方法吗?

谢谢!

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

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

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

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

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

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

截图 替代文字