SWT Table with variable row height: Working on Linux, but not Mac/Windows

烂漫一生 提交于 2019-12-04 13:27:44

问题


Problem: I need an SWT Table (JFace TableViewer) with variable row height. In fact, I solved this on my development machine (running Ubuntu 10.10). Unfortunately, this doesn't work on Windows nor on Mac.

Initially, I thought I didn't use the libraries correctly. But by now I fear that what I want to do is simply not possible on Windows. I hope someone here convinces me otherwise.

To reproduce: rather than providing my code here, I built a minimal program to reproduce the problem. I started with the following 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

I modified the update() method to produce two lines of text for directories and one line for files (to simulate an environment with variable row heights):

...
if (file.isDirectory()) {
    cell.setText(styledString.toString() + "\n"
        + styledString.toString());
    cell.setImage(IMAGE1);
} else {
    cell.setImage(IMAGE2);
}
...

This works as intended on Linux, but on Windows all rows have the same height. Specifically, only one line is visible.

Next, I was trying to help SWT by making measure() more intelligent. So I rewrote measure() like this:

protected void measure(Event event, Object element) {
    if (((File) element).isDirectory()) {
        event.height = 32;
    } else {
        event.height = 16;
    }
    super.measure(event, element);
}

The result: All rows have the height 32. Again, this works as intended on Linux.

My fear is, that on Windows simply all rows must be the same height. This would be a showstopper for me. Can anybody confirm this, or even better, provide a workaround?

Thanks!


回答1:


I ran into this problem as well -- needing an SWT table widget that could support cells of varying heights. As the.duckman says, Win32 table rows cannot do this. We ended up using the KTable widget. It doesn't use the native OS tables.

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

It worked okay for us, but it's got some quirks. Luckily the source code is fairly easy to modify to suit your needs.




回答2:


I can confirm that on Win32 table rows can only have same height. See for example this bug report. The workaround from bug 148039 makes setItemHeight() accessible, but that doesn't change this restriction.




回答3:


We use the Nebula Grid widget. http://www.eclipse.org/nebula/widgets/grid/grid.php

It is exceptionally flexible. In our case we use it to get more of html style table functionality combined with a treeViewer widget.

Screenshot



来源:https://stackoverflow.com/questions/4082082/swt-table-with-variable-row-height-working-on-linux-but-not-mac-windows

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!