gpt4 book ai didi

java - 双击 JavaFX 2.2 禁用 TreeItem 的默认展开/折叠

转载 作者:搜寻专家 更新时间:2023-11-01 02:28:28 26 4
gpt4 key购买 nike

我正在处理一个 JavaFX 2.2 项目,我想在 TreeItem 上设置鼠标(双击)单击事件的自定义处理。使用 treeview.setOnMouseClicked 我可以毫无错误地触发我的代码,但问题是 TreeItem 在每次鼠标双击时都会在展开和折叠之间切换。我想这是默认行为,但我如何禁用它??

最佳答案

我遇到了同样的问题,并使用 EventDispatcher 及时解决了它。

class TreeMouseEventDispatcher implements EventDispatcher {
private final EventDispatcher originalDispatcher;

public TreeMouseEventDispatcher(EventDispatcher originalDispatcher) {
this.originalDispatcher = originalDispatcher;
}

@Override
public Event dispatchEvent(Event event, EventDispatchChain tail) {
if (event instanceof MouseEvent) {
if (((MouseEvent) event).getButton() == MouseButton.PRIMARY
&& ((MouseEvent) event).getClickCount() >= 2) {

if (!event.isConsumed()) {
// Implement your double-click behavior here, even your
// MouseEvent handlers will be ignored, i.e., the event consumed!
}

event.consume();
}
}
return originalDispatcher.dispatchEvent(event, tail);
}
}

然后将此 TreeMouseEventDispatcher 用于 TreeCell:

treeView.setCellFactory(new Callback<TreeView<T>, TreeCell<T>>() {
@Override
public TreeCell<T> call(TreeView<T> param) {
return new TreeCell<T>() {
@Override
protected void updateItem(T item, boolean empty) {
if (item != null && !empty) {
EventDispatcher originalDispatcher = getEventDispatcher();
setEventDispatcher(new TreeMouseEventDispatcher(originalDispatcher));
}
}
};
}
}

关于java - 双击 JavaFX 2.2 禁用 TreeItem 的默认展开/折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15509203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com