JFaceを作成するTreeViewer
場合、SWT定数を使用して、ユーザーがツリー項目(SWT.SINGLE
またはSWT.MULTI
)に許可する単一または複数の選択を設定できます。
アイテムがまったく選択できないツリーが欲しいので、誰か助けてくれませんか?プレビュー用に欲しいのですが、ユーザーがそこにあるアイテムを選択できないようにする必要があります。
よろしくお願いします。
JFaceを作成するTreeViewer
場合、SWT定数を使用して、ユーザーがツリー項目(SWT.SINGLE
またはSWT.MULTI
)に許可する単一または複数の選択を設定できます。
アイテムがまったく選択できないツリーが欲しいので、誰か助けてくれませんか?プレビュー用に欲しいのですが、ユーザーがそこにあるアイテムを選択できないようにする必要があります。
よろしくお願いします。
なぜ選択を抑制したいのかよくわかりませんが、次のように機能します。
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(final SelectionChangedEvent event) {
if (!event.getSelection().isEmpty()) {
v.setSelection(StructuredSelection.EMPTY);
}
}
});
これに加えて、私は視聴者が次のことを確認します。
もう1つの簡単な解決策は、ビューアを別のコンポジットに配置し、その有効状態をfalseに設定することです。
Composite c = new Composite(parent, SWT.NONE);
TreeViewer viewer = new TreeViewer(c, SWT.Border);
c.setEnabled(false);
これで、ビューアは灰色で表示されなくなります(設定viewer.setEnabled
すると灰色で表示されます)が、ユーザーはビューアで何も選択できなくなります。ビューアの更新と更新は問題なく機能します。SelectionEvents
ただし、ビューアをクリックしてもnoがスローされることに注意してください。
これを試していただけませんか?基本的に、選択イベントにフィルターを追加します。Viewer実装の場合、org.eclipse.jface.util.OpenStrategyクラスは、Viewerが理解する選択イベントを発生させる役割を果たします。SWT選択イベントにフィルターが追加された場合、ビューアーは基になる選択について知ることはありません。
public class SWTSimpleTree {
Display display = new Display();
Shell shell = new Shell(display);
Tree tree;
private Listener filter = new Listener() {
@Override
public void handleEvent(Event event) {
event.type=SWT.None;
event.doit=false;
event.item = null;
tree.deselectAll();
}
};
public SWTSimpleTree() {
shell.setLayout(new GridLayout());
tree = new Tree(shell, SWT.BORDER);
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
TreeItem item = new TreeItem(tree, SWT.NULL);
item.setText("ITEM");
TreeItem item2 = new TreeItem(item, SWT.NULL);
item2.setText("ITEM2");
TreeItem item3 = new TreeItem(item2, SWT.NULL);
item3.setText("ITEM3");
System.out.println("item: " + item.getParent() + ", " + item.getParentItem());
System.out.println("item2: " + item2.getParent() + ", " + item2.getParentItem());
System.out.println(tree.getItemCount());
System.out.println(tree.getItems().length);
tree.getDisplay().addFilter(SWT.Selection, filter);
tree.getDisplay().addFilter(SWT.DefaultSelection, filter);
shell.setSize(300, 200);
shell.open();
//textUser.forceFocus();
// Set up the event loop.
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
// If no more entries in event queue
display.sleep();
}
}
display.dispose();
}
private void init() {
}
public static void main(String[] args) {
new SWTSimpleTree();
}
}