【问题标题】:SWT Table with variable row height: Working on Linux, but not Mac/Windows具有可变行高的 SWT 表:适用于 Linux,但不适用于 Mac/Windows
【发布时间】:2010-11-02 21:04:16
【问题描述】:

问题:我需要一个具有可变行高的 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); } 别的 { cell.setImage(IMAGE2); } ...

这在 Linux 上按预期工作,但在 Windows 上,所有行都具有相同的高度。具体来说,只有一条线是可见的。

接下来,我试图通过让 measure() 更智能来帮助 SWT。所以我像这样重写了 measure() :

受保护的无效措施(事件事件,对象元素){
    if (((文件)元素).isDirectory()) {
        事件.高度 = 32;
    } 别的 {
        事件.高度 = 16;
    }
    超级测量(事件,元素);
}

结果:所有行的高度均为 32。同样,这在 Linux 上按预期工作。

我担心的是,在 Windows 上,所有行的高度都必须相同。这对我来说将是一个炫耀。任何人都可以确认这一点,或者更好地提供解决方法吗?

谢谢!

【问题讨论】:

标签: java swt jface


【解决方案1】:

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

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

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

【讨论】:

  • 这看起来很有趣。如果我还没有使用 AgileGrid 进行重构,我会试试 Ktable。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    截图

    【讨论】:

    • 您确定 Nebula 解决了这个问题吗?我相信我确实检查过并拒绝了它。我不确定天气我拒绝了它,因为它在 ALPHA 中,或者因为它也有行高限制。但我认为也是因为行高问题。
    • 获得可变高度并非完全开箱即用,但它非常简单。 Grid 中的每一行都有自己独立的高度属性。因此,在普通表格小部件中的绘画/测量中,您可以调整高度,但所有表格项现在都是网格中的最大高度,您可以调整每个 GridItem.setHeight()。在我的情况下,我使用网格表查看器并让我的标签提供程序更新方法计算每一行的适当高度。它是 Beta 版,但在过去 2 年多的时间里对我们来说非常稳定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多