如何在 JavaFX 中的 html 元素上允许上下文菜单

问题描述 投票:0回答:1

我在 JavaFX 中有一个应用程序,我使用

WebView
来显示特定的网页。

我需要页面上的鼠标右键不起作用;但如果我在具有

id=eventDiv
的 html 元素上使用它,它应该对它们起作用。这是 JavaFX 17。

我将 ContexMenuEnabled 设置为 false,并且没有上下文菜单,没关系。

            WebView webView = new WebView();
            webView.setContextMenuEnabled(false);
            webView.getEngine().setJavaScriptEnabled(true);
            WebEngine webEngine = webView.getEngine();
            webEngine.setUserStyleSheetLocation("data:, body { background-color: #EBEBEB; }");
            webEngine.setOnAlert(event -> showAlert(event.getData()));
            webEngine.setConfirmHandler(message -> showConfirm(message));
            System.out.println(url);
            webEngine.load(url);

我使用人工智能和文档做了类似的事情,但不幸的是它不起作用。我希望当我右键单击给定的 HTML 元素(在本例中是表格单元格中的 div)时,它会打开一个自定义上下文菜单,这是在 JS 中完成的。我该怎么做才能让它发挥作用?


            webView.setOnMousePressed(event -> {
                if (event.isSecondaryButtonDown()) {
                    event.consume();
                }
            });

            webView.getEngine().getLoadWorker().stateProperty().addListener((observable, oldValue,             newValue) -> {
                if (newValue == Worker.State.SUCCEEDED) {
                    JSObject window = (JSObject) webView.getEngine().executeScript("window");
                    window.setMember("eventDiv", new EventDivHandler());
                }
            });


    public class EventDivHandler {
        public void handleEventDivClick() {
            // Obsłuż PPM na elemencie z id=eventDiv
            System.out.println("Kliknięto na element z id=eventDiv");
        }
    }
java javafx webview
1个回答
0
投票

应用程序.java

配置事件过滤器:

webView.addEventFilter(MouseEvent.MOUSE_PRESSED, event

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class App extends Application {

    @Override
    public void start(Stage primaryStage) {
        WebView webView = new WebView();
        // Load Web Page
        webView.getEngine().load("https://www.wikipedia.org/");
        // config event filter
        webView.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> {
            if (event.getButton() == MouseButton.SECONDARY) {
                event.consume();
            }
        });
        BorderPane root = new BorderPane();
        root.setCenter(webView);        
        Scene scene = new Scene(root, 800, 600);
        
        primaryStage.setTitle("Disable Right Click in WebView");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.