Есть ли способ заставить полосу прокрутки дерева отображаться поверх TreeEditors? - PullRequest
0 голосов
/ 10 февраля 2020

Я использую дерево SWT, и у меня возникают проблемы с полосами прокрутки, отображаемыми за TreeEditors, например:

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, чтобы заставить его оставить некоторую дополнительную обрезку вправо, чтобы было место для отображения полосы прокрутки, но они не предназначены для переопределения, поэтому я бы хотел Во избежание этого пустое пространство может выглядеть странно, если полоса прокрутки не отображается.

...