阻止/禁用JavaFX 2 WebView右键单击

nul*_*ull 5 javafx webview javafx-2

我正在寻找一种方法来阻止/禁用javafx.scene.web.WebView中的右键单击.更具体地说,我不希望右键单击显示上下文菜单.我是这项技术的新手,无法找到实现这一目标的方法.

Pet*_*ull 14

仅供记录,它在JavaFX 2.2中实现.请参阅setContextMenuEnabled的文档

  • FXML 中的 `<WebView fx:id="webViewId" contextMenuEnabled="false"` 尚不起作用,因此确实在控制器中使用此调用。[链接](/sf/ask/2984324171/) (2认同)

nul*_*ull 5

我想出了工作,但是丑陋,不优雅,我会说,党派解决方案,我不喜欢,但实际上我没有(或者只是找不到)其他出路.

它包括修改WebView的EventDispatcher.

所以我的EventDispatcher实现需要对原始WebView EventDispatcher的引用,看起来像这样:

public class MyEventDispatcher implements EventDispatcher {

private EventDispatcher originalDispatcher;

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

@Override
public Event dispatchEvent(Event event, EventDispatchChain tail) {
    if (event instanceof MouseEvent) {
        MouseEvent mouseEvent = (MouseEvent) event;
        if (MouseButton.SECONDARY == mouseEvent.getButton()) {
            mouseEvent.consume();
        }
    }
    return originalDispatcher.dispatchEvent(event, tail);
}
}
Run Code Online (Sandbox Code Playgroud)

每次调度事件时,都会通过我们的调度员检查是否正确点击.如果它是我只是消耗它并继续前进.

要使其工作,您必须使用WebView:

WebView webView = new WebView();
EventDispatcher originalDispatcher = webView.getEventDispatcher();
webView.setEventDispatcher(new MyEventDispatcher(originalDispatcher));
Run Code Online (Sandbox Code Playgroud)

每个评论,线索等都表示赞赏.