本文介绍了javafx webview / webengine上的自定义上下文菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在 WebEngine
javafx中为文档的整个条目设置自定义上下文菜单?
像这样的东西
+ ------------ +
| Reload |
|保存页面|
|隐藏图片|
+ ------------ +
我喜欢调用并显示整个文档条目的上下文弹出窗口(每个节点都相同)。谢谢。
解决方案
我没有看到与默认上下文菜单交互的方法。但是,禁用它并实现自己并不难。
使用
<$ p $禁用默认上下文菜单p>
webView.setContextMenuEnabled();
然后创建自己的上下文菜单,并使用Web视图注册鼠标监听器以在右侧显示点击:
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;
公共类WebViewContextMenuTest扩展Application {
private final String START_URL =
http://stackoverflow.com/questions/27047447/customized-上下文菜单上JavaFX的网页视图的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(隐藏图像);
hideImages.setOnAction(e - > System.out.println(隐藏图像...));
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){
returnhttp ://+ text;
} else {
返回文字;
}
}
public static void main(String [] args){
launch(args);
}
}
How may I have a customized context menu for whole entry of the document in WebEngine
javafx?
Something like this
+------------+
|Reload |
|Save page |
|Hide Images |
+------------+
I like to invoke and show this context popup for whole document entry(same for every node). Thanks.
解决方案
I don't see a way to interact with the default context menu. However, it's not hard to disable it and implement your own.
Disable the default context menu with
webView.setContextMenuEnabled();
Then create your own context menu, and register a mouse listener with the web view to show it on right click:
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);
}
}
这篇关于javafx webview / webengine上的自定义上下文菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!