我正在使用SWT树,并且在TreeEditor后面显示滚动条时遇到问题,像这样:
您可以看到垂直滚动条在顶部达到峰值,每行之间都有一点点,但大部分被掩盖了。
下面是重复此代码的代码:
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强制其在其右边保留一些额外的修剪,以便在滚动条上有显示空间,但这些原本不是要覆盖的,所以我想避免这种情况,当不显示滚动条时,空格可能看起来很奇怪。