我正在寻找一种方法来阻止/禁用javafx.scene.web.WebView中的右键单击。更具体地说,我不希望右键单击显示上下文菜单。我是这项技术的新手,无法找到方法。
答案 0 :(得分:13)
仅供记录,它在JavaFX 2.2中实现。请参阅setContextMenuEnabled
的文档答案 1 :(得分: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);
}
}
每次调度事件时,都会通过我们的调度员检查是否正确点击。如果它是我只是消耗它并继续前进。
要使其工作,您必须使用WebView:
WebView webView = new WebView();
EventDispatcher originalDispatcher = webView.getEventDispatcher();
webView.setEventDispatcher(new MyEventDispatcher(originalDispatcher));
赞赏每条评论,线索等。
答案 2 :(得分:3)
您可以使用以下css设置上下文菜单的样式。
.context-menu { -fx-background-color: transparent; }
.menu-item { -fx-background-color: transparent; }
.menu-item .label { -fx-text-fill: transparent; }
.menu-item:show-mnemonics .mnemonic-underline { -fx-stroke: -transparent; }
这将使所有上下文菜单和菜单项透明。我不确定您可以使用的css选择器使其仅适用于WebView上下文菜单。如果您的应用程序中没有其他菜单,那可能不是什么大问题。
答案 3 :(得分:3)
您可以使用js(jquery
已使用)
$(document).ready( function() { document.oncontextmenu = function() { return false } } );
答案 4 :(得分:3)
使用JavaFX 2.2+,现在可以将WebView的ContextMenuEnabled设置为false:
webView.setContextMenuEnabled(false);
答案 5 :(得分:2)
不幸的是,这还不可能。您可能需要跟踪功能请求:http://javafx-jira.kenai.com/browse/RT-15684
答案 6 :(得分:1)
这将删除整个阶段的上下文菜单:
primaryStage.getScene().addEventFilter(MouseEvent.MOUSE_RELEASED,
new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
if (event.getButton() == MouseButton.SECONDARY) {
event.consume();
}
}
});