См. Attachment_TreeCursor. TreeCursor создан для дерева внутри FormPage (для FormEditor).SWT TreeCursor виджет, созданный с предустановленной областью
Создать FormEditor:
package test.treecursor.handlers;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.editor.FormEditor;
public class TestEditor extends FormEditor {
private TestEditorPage page;
@Override
protected Composite createPageContainer(final Composite parent) {
return super.createPageContainer(parent);
}
@Override
protected void addPages() {
try {
this.page = new TestEditorPage(this);
addPage(this.page);
}
catch (PartInitException e) {
e.printStackTrace();
}
}
@Override
public void doSave(final IProgressMonitor monitor) {
}
@Override
public void doSaveAs() {
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
}
Создать FormPage:
package test.treecursor.handlers;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TreeCursor;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormPage;
public class TestEditorPage extends FormPage {
public TestEditorPage(final TestEditor testEditor) {
super(testEditor, "1", "MyTitle");
}
@Override
protected void createFormContent(final IManagedForm managedForm) {
Composite composite = managedForm.getForm().getBody();
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
Tree tree = createTree(composite);
createTreeColumns(tree);
final TreeCursor cursor = new TreeCursor(tree, SWT.BORDER);
}
private Tree createTree(final Composite composite) {
Tree tree = new Tree(composite, SWT.MULTI | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
tree.setLayout(composite.getLayout());
tree.setLayoutData(composite.getLayoutData());
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
return tree;
}
private void createTreeColumns(final Tree tree) {
TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
column1.setText("First column");
column1.setWidth(300);
TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
column2.setText("Second column");
column2.setWidth(300);
}
}
Добавить этот редактор для точки расширения редактора: org.eclipse.ui.editors
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.editors">
<editor
class="test.treecursor.handlers.TestEditor"
default="false"
id="test.treecursor.editor1"
name="TestEditor">
</editor>
</extension>
</plugin>
Если Я установил SWT-стиль в SWT.TRANSPARENT, я больше не вижу этот «патч», но я все еще не могу выбрать строки i n дерево в этой области. Похоже, что курсор выбирает этот размер из его родительского составного элемента Form/ScrollableForm. На отображаемом объекте tree.getDisplay() я вижу поле RECT clickRect, имеющее значения для левого, правого, нижнего и верхнего. Могут ли они быть подняты для создания курсора? Как я могу избавиться от этого?
Невозможно воспроизвести без остальной части кода, вы должны предоставить [MCVE] (http://stackoverflow.com/help/mcve) –
@Loris Securo: я обновил исходный код, с которым вы можете воспроизвести проблема. – Vrinda