如果我們在發送點擊前捕獲點擊並使用正確的點擊,則避免修改皮膚或默認行爲的解決方案更爲簡單。
爲此,我們可以使用一個EventDispatcher
,過濾既按下鼠標及以上的箭頭,這是StackPane
節點右鍵:
class CellEventDispatcher implements EventDispatcher {
private final EventDispatcher original;
public CellEventDispatcher(EventDispatcher original) {
this.original = original;
}
@Override
public Event dispatchEvent(Event event, EventDispatchChain tail) {
if (event.getEventType().equals(MouseEvent.MOUSE_PRESSED) ||
event.getEventType().equals(ContextMenuEvent.ANY)){
event.consume();
}
if(event instanceof KeyEvent && event.getEventType().equals(KeyEvent.KEY_PRESSED)){
if((((KeyEvent)event).getCode().equals(KeyCode.LEFT) ||
((KeyEvent)event).getCode().equals(KeyCode.RIGHT))){
event.consume();
}
}
return original.dispatchEvent(event, tail);
}
}
現在,我們運用我們的自定義調度樹視圖:
@Override
public void start(Stage primaryStage) {
TreeView<String> tree = new TreeView<>();
...
EventDispatcher treeOriginal = tree.getEventDispatcher();
tree.setEventDispatcher(new CellEventDispatcher(treeOriginal));
Scene scene = new Scene(tree);
primaryStage.setScene(scene);
primaryStage.show();
}
這將消耗樹上箭頭上的任何點擊(左或右)。
EDIT
添加到事件調度器類在用戶使用鍵盤來遍歷樹視圖,消耗崩潰的情況下/擴大與箭頭LEFT
或RIGHT
事件。
別樹項目帶任何功能(即可以點擊他們,用一些自定義操作)? –
是;我實現了一個自定義TreeCell並將其設置爲我的細胞工廠。我並不關心是否能夠開始/取消/提交編輯,因爲每個TreeCell的圖形都是帶有各種組合框和其他控件的FlowPane,用於顯示單元格的各種基礎模型。 我仍然希望他們能夠點擊,突出顯示並拖動。 – Nathan
是否有任何方法可以用CSS去除摺疊按鈕的整個擊中階段?我甚至在這一點上解決了這個問題...... – Nathan