Блокировка / отключение JavaFX 2 WebView правой кнопкой мыши - PullRequest
3 голосов
/ 28 марта 2012

Я ищу способ заблокировать / отключить щелчок правой кнопкой мыши в javafx.scene.web.WebView. Чтобы быть более конкретным, я не хочу, чтобы контекстное меню отображалось при щелчке правой кнопкой мыши. Я новичок в этой технологии и не могу найти способ сделать это.

Ответы [ 7 ]

13 голосов
/ 18 октября 2012

Просто для записи, он реализован в JavaFX 2.2. См. Документацию для setContextMenuEnabled

5 голосов
/ 29 марта 2012

Я придумал работать, но уродливо, не элегантно и, я бы сказал, партизанское решение, которое мне не очень нравится, но на самом деле у меня нет (или просто не могу найти) другого выхода.

Включает изменение EventDispatcher в WebView.

Итак, моя реализация 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));

Каждый комментарий, подсказка и т. Д. Приветствуются.

3 голосов
/ 22 августа 2014

С JavaFX 2.2+ теперь возможно установить ContextMenuEnabled WebView в false:

webView.setContextMenuEnabled(false);

Документ API WebView.

3 голосов
/ 07 мая 2013

Вы можете сделать это с помощью js (jquery used)

$(document).ready( function() { document.oncontextmenu = function() { return false } } );
3 голосов
/ 31 марта 2012

Вы можете стилизовать контекстные меню, используя следующую 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. Если в вашем приложении нет других меню, это может не иметь большого значения.

2 голосов
/ 28 марта 2012

К сожалению, это пока невозможно.Для этого есть запрос функции, который вы можете отслеживать: http://javafx -jira.kenai.com / browse / RT-15684

1 голос
/ 09 октября 2013

Это удалит контекстное меню для всего этапа:

primaryStage.getScene().addEventFilter(MouseEvent.MOUSE_RELEASED, 
            new EventHandler<MouseEvent>() {
    public void handle(MouseEvent event) {
        if (event.getButton() == MouseButton.SECONDARY) {
            event.consume();
        }

    }
});
...