有没有一种方法可以强制Tree滚动条显示在TreeEditors上?

时间:2020-02-10 16:24:59

标签: gtk swt gtk3

我正在使用SWT树,并且在TreeEditor后面显示滚动条时遇到问题,像这样:

enter image description here

您可以看到垂直滚动条在顶部达到峰值,每行之间都有一点点,但大部分被掩盖了。

下面是重复此代码的代码:

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TreeEditor;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;

public class TestTreeScrollbars {

    public static void main(String[] args) {
        Display display = new Display();

        Shell shell = new Shell(display, SWT.SHELL_TRIM);
        shell.setLayout(new FillLayout());

        // Create virtual tree with checkboxes, and 2 columns
        Tree tree = new Tree(shell, SWT.NONE);
        tree.setHeaderVisible(true);
        tree.setLinesVisible(true);
        for (int i = 0; i < 3; ++i) {
            new TreeColumn(tree, SWT.NONE).setText("Column " + i);
        }

        shell.pack();
        shell.setSize(300, 300);
        shell.open();

        // Create a tree item with a tree editor for the second/last column
        for (int i = 0; i < 10; ++i) {
            TreeItem item = new TreeItem(tree, SWT.NONE);
            item.setText(0, "Some test text");
            item.setText(1, "More test text");
            Label control = new Label(tree, SWT.NONE);
            control.setBackground(display.getSystemColor(SWT.COLOR_CYAN));
            TreeEditor treeEditor = new TreeEditor(tree);
            treeEditor.grabHorizontal = treeEditor.grabVertical = true;
            treeEditor.setEditor(control, item, tree.getColumnCount() - 1);
        }

        // Pack all columns
        for (TreeColumn column : tree.getColumns()) {
            column.pack();
        }

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
}

请注意,我以带有彩色背景的标签为例,但组合和画布也存在此问题。

我的环境是Eclipse 4.12.0.I20190605-1800,GTK 3.22.30,WebKitGTK 2.22.7,CentOS 7.7.1908,GNOME 3.28.2。

此版本的GNOME具有消失的滚动条,当您在窗口外面时它们不会出现,当您在窗口中时它们会变得非常小,然后当您用鼠标在上面的图片中显示它们的大小在他们之上。在MATE上,滚动条在需要时会永久显示,而不会在树的右侧添加额外的空间以适合滚动条,因此不会发生此问题。

我不确定这是否是Eclipse / GTK错误还是什么,但是有没有办法解决这个问题以迫使滚动条位于顶部?

我尝试做Tree.moveAbove(Label),但似乎什么也没做。我也可以覆盖Label / Combo / Canvas强制其在其右边保留一些额外的修剪,以便在滚动条上有显示空间,但这些原本不是要覆盖的,所以我想避免这种情况,当不显示滚动条时,空格可能看起来很奇怪。

0 个答案:

没有答案