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