具有可变行高的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小部件。
截图