2010-11-02 71 views
5

问题:我需要一个具有可变行高的SWT表(JFace TableViewer)。事实上,我在我的开发机器(运行Ubuntu 10.10)上解决了这个问题。不幸的是,这不适用于Windows或Mac。可变行高的SWT表:在Linux上工作,但不能在Mac/Windows上工作

最初,我以为我没有正确使用这些库。但现在我担心,我想要做的事情在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。所以我重写了这样的度量():

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

其实,我可能已经发现了这种现象的解释,甚至可能修复(我还是要尝试了这一点):https://bugs.eclipse.org/bugs/show_bug .cgi?id = 148039 – jastram 2010-11-02 21:42:28

+0

感谢所有的答案。我最终使用了http://sourceforge.net/projects/agilegrid/,它也可以原生绘制表格,例如KTable。很高兴与SWT合作。 – jastram 2010-12-14 13:20:49

回答

2

我可以确认在Win32表上的行只能有相同的高度。例如参见this bug report。来自错误148039的解决方法使得setItemHeight()可以访问,但是这并没有改变这个限制。

4

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

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

它的工作好了我们,但它有一些怪癖。幸运的是,源代码很容易修改以适应您的需求。

+0

这看起来很有趣。如果我还没有用AgileGrid重构,我会尝试一下Ktable。 – jastram 2010-12-14 13:21:59

1

我们使用Nebula Grid小部件。 http://www.eclipse.org/nebula/widgets/grid/grid.php

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

截图 alt text

+0

你确定星云解决了这个问题吗?我相信我确实检查了它并拒绝了它。我不知道天气我拒绝了它,因为它在ALPHA,或者因为它也有行高限制。但我认为这是因为行高问题。 – jastram 2010-12-14 13:18:44

+0

要获得变量高度并不是完全开箱即用,但它非常直接。网格中的每一行都有自己的独立高度属性。因此,在普通表格窗口小部件中的绘图/测量处,您可以调整高度,但是现在所有的表格都是Grid中的最大高度,您可以调整每个GridItem.setHeight()。在我的情况下,我正在使用网格表格查看器,并让我的标签提供程序更新方法计算每行的适当高度。它是Beta版本,但对于我们来说在过去2年左右一直非常稳定。 – fisherja 2010-12-21 20:18:00

相关问题