问题:我需要一个具有可变行高的SWT表(JFace TableViewer)。事实上,我在我的开发机器(运行Ubuntu 10.10)上解决了这个问题。不幸的是,这在Windows上和Mac上都不起作用。
最初,我以为我没有正确使用这些库。但到现在为止,我担心我想要做的事情在Windows上根本不可能。我希望有人在这里说服我。
重现:我没有在这里提供代码,而是构建了一个最小程序来重现问题。我从下面的Snipplet开始:
我修改了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上,所有行的高度必须相同。这对我来说是一个显而易见的事。任何人都可以证实这一点,甚至更好,提供一种解决方法吗?
谢谢!
答案 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小部件。
截图