我已經實現了TreeViewer,並在其中添加了雙擊偵聽器。這個雙擊監聽器應該展開/摺疊節點。SWT TreeViewer在設置SWT.FULL_SELECTION時同時展開和摺疊
treeViewer = new TreeViewer(component, SWT.BORDER | SWT.MULTI);
treeViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent e) {
final IStructuredSelection selection = (IStructuredSelection) e
.getSelection();
if (selection == null || selection.isEmpty())
return;
final Object sel = selection.getFirstElement();
TreeNode selNode = (TreeNode) sel;
if (treeViewer.getExpandedState(sel)) {
treeViewer.collapseToLevel(sel, 1);
} else {
treeViewer.expandToLevel(sel, 1);
}
}
});
現在,如果我改變的TreeViewer是FULL_SELECTION像...
treeViewer = new TreeViewer(component, SWT.BORDER | SWT.MULTI | SWT.FULL_SELECTION);
這behavoiur更改很奇怪。
當雙擊顯示標籤的節點時,一切都如前所述。但是當點擊該行時,離標籤稍遠一點,節點同時展開/摺疊,完全沒有改變。
調試它我發現,在我收到雙擊事件之前,還有另一個事件被觸發(或者是在我處理它之前正在偵聽它),擴展/摺疊特定節點。禁用監聽器,我能夠擺脫這種行爲。但是當雙擊標籤時,這又禁用了節點的擴展。
我在調試eclipse時看到過類似的行爲,並想知道這是一個知道的bug還是更壞的預期行爲?
任何建議表示感謝,並提前謝謝!
謝謝你的回答。 我自己正在搞這個想法,但無法弄清楚如何讓我的手在標籤或行被點擊。 +1。 我會在接下來的日子裏進一步檢查,但現在我會將其標記爲正確的答案。 – Dalewn 2015-03-14 18:09:22
我測試了你的代碼,它適用於我。我只需要將'treeItem.getBounds(int Index)'修改爲'treeItem.getBounds()',以便使它適用於多列樹。 – Dalewn 2015-03-16 08:57:01
感謝您的反饋,我已經更新了相應的答案。 – 2015-03-16 09:16:06