Я пытаюсь настроить многоколоночный SWT Tree
(через JFace TreeViewer
), который позволяет пользователю переупорядочивать его столбцы, перетаскивая заголовки столбцов. Однако первый столбец должен оставаться фиксированным и неподвижным. Я могу использовать метод setMoveable(true)
для каждого TreeColumn
, кроме первого, чтобы получить действительно близкое значение, но это не мешает пользователю перетаскивать другой столбец слева от него. Любые идеи, как решить эту проблему?
Вот упрощенный рабочий фрагмент (без JFace), иллюстрирующий проблему:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Display;
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 TreeTableColumnMove {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new RowLayout(SWT.HORIZONTAL));
Tree tree = new Tree(shell, SWT.BORDER | SWT.CHECK);
tree.setLayoutData(new RowData(-1, 100));
tree.setHeaderVisible(true);
for (int i = 0; i < 5; i++) {
TreeColumn column = new TreeColumn(tree, SWT.CENTER);
column.setText("Col " + i);
column.setWidth(60);
if (i > 0) column.setMoveable(true);
}
TreeItem item = new TreeItem(tree, SWT.NONE);
item.setText(new String[] { "c0", "c1", "c2", "c3", "c4" });
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}