gpt4 book ai didi

java - javafx webview/webengine 上的自定义上下文菜单

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:24 24 4
gpt4 key购买 nike

如何在 WebEngine javafx 中为文档的整个条目定制上下文菜单?
像这样

+------------+
|Reload |
|Save page |
|Hide Images |
+------------+

我喜欢为整个文档条目调用并显示此上下文弹出窗口(每个节点都相同)。谢谢。

最佳答案

我看不到与默认上下文菜单交互的方法。但是,禁用它并实现您自己的并不难。

禁用默认上下文菜单

webView.setContextMenuEnabled();

然后创建您自己的上下文菜单,并在 Web View 中注册一个鼠标监听器以在右键单击时显示它:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;


public class WebViewContextMenuTest extends Application {

private final String START_URL =
"http://stackoverflow.com/questions/27047447/customized-context-menu-on-javafx-webview-webengine/27047830#27047830";

@Override
public void start(Stage primaryStage) {
TextField locationField = new TextField(START_URL);
WebView webView = new WebView();
webView.getEngine().load(START_URL);

webView.setContextMenuEnabled(false);
createContextMenu(webView);

locationField.setOnAction(e -> {
webView.getEngine().load(getUrl(locationField.getText()));
});
BorderPane root = new BorderPane(webView, locationField, null, null, null);
primaryStage.setScene(new Scene(root, 800, 600));
primaryStage.show();

}

private void createContextMenu(WebView webView) {
ContextMenu contextMenu = new ContextMenu();
MenuItem reload = new MenuItem("Reload");
reload.setOnAction(e -> webView.getEngine().reload());
MenuItem savePage = new MenuItem("Save Page");
savePage.setOnAction(e -> System.out.println("Save page..."));
MenuItem hideImages = new MenuItem("Hide Images");
hideImages.setOnAction(e -> System.out.println("Hide Images..."));
contextMenu.getItems().addAll(reload, savePage, hideImages);

webView.setOnMousePressed(e -> {
if (e.getButton() == MouseButton.SECONDARY) {
contextMenu.show(webView, e.getScreenX(), e.getScreenY());
} else {
contextMenu.hide();
}
});
}

private String getUrl(String text) {
if (text.indexOf("://")==-1) {
return "http://" + text ;
} else {
return text ;
}
}

public static void main(String[] args) {
launch(args);
}
}

关于java - javafx webview/webengine 上的自定义上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27047447/

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