如何使JavaFX Web浏览器显示警报并确认消息 [英] How can I make JavaFX web browser displays alert and confirm message

查看:382
本文介绍了如何使JavaFX Web浏览器显示警报并确认消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的java网页浏览器不显示提醒(消息);并确认(消息);要么,我通常使用c#web Browser组件,它的工作原理很完美,但我是新手。

My java web browser don't display alert("message"); and confirm("message"); either, I ussually use c# web Browser component and it's works perfectly but I'm new at this.

public void  openPage(String url){
    JFXPanel jfxPanel = new JFXPanel();
    JFrame frame = new JFrame("");
    frame.add(jfxPanel);
    Platform.runLater(() -> {
        WebView webView = new WebView();
        jfxPanel.setScene(new Scene(webView));
        webView.getEngine().load(url);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    });
}


推荐答案

alert ,注册 onAlert 处理程序。对于确认,请注册 confirmHandler 。请参阅 <的用户界面回调部分code> WebEngine 文档

For alert, register an onAlert handler with the web engine. For confirm, register a confirmHandler with the web engine. See the "User interface callbacks" section of the WebEngine documentation.

这是一个简单的例子:

import java.util.Optional;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class WebViewWithAlertAndConfirm extends Application {

    private WebEngine engine;

    @Override
    public void start(Stage primaryStage) {
        WebView webView = new WebView();
        engine = webView.getEngine();

        engine.setOnAlert(event -> showAlert(event.getData()));
        engine.setConfirmHandler(message -> showConfirm(message));

        String content =   
                "<html>"
                + "<head>"
                + "<script language='javascript'>"
                + "function doConfirm() {"
                + "    var accepted = confirm('Are you sure?');"
                + "    if (accepted) {"
                + "       document.getElementById('result').innerHTML = 'Accepted';"
                + "    } else {"
                + "       document.getElementById('result').innerHTML = 'Declined';"
                + "    }"
                + "}"
                + "</script>"
                + "<body>"
                + "<div><button onclick='alert(\"This is an alert!\")'>Show alert</button>"
                + "<button onclick='doConfirm()'>Confirm</button>"
                + "</div>"
                + "<div id='result'/>"
                + "</body>"
                + "</html>";

        engine.loadContent(content);

        primaryStage.setScene(new Scene(new BorderPane(webView)));
        primaryStage.show();
    }

    private void showAlert(String message) {
        Dialog<Void> alert = new Dialog<>();
        alert.getDialogPane().setContentText(message);
        alert.getDialogPane().getButtonTypes().add(ButtonType.OK);
        alert.showAndWait();
    }

    private boolean showConfirm(String message) {
        Dialog<ButtonType> confirm = new Dialog<>();
        confirm.getDialogPane().setContentText(message);
        confirm.getDialogPane().getButtonTypes().addAll(ButtonType.YES, ButtonType.NO);
        boolean result = confirm.showAndWait().filter(ButtonType.YES::equals).isPresent();

        // for debugging:
        System.out.println(result);

        return result ;
    }

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

这篇关于如何使JavaFX Web浏览器显示警报并确认消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆