javafx-webview中的js函数调用java函数

目录结果
在这里插入图片描述

  1. ide中新建javafx项目
  2. sample下创建htmlfile.html
<!DOCTYPE html>
<html lang="zh-cn">
<meta charset="utf-8">
<head>
</head>
<body style="background:red">

<h1>我的第一个标题</h1>

<p id="result">我的第一个段落。</p>
<button id="getjava" onclick="send()" style="background:green">调用java</button>

<script>
    function send(){
        alert(111)
        //这里的javaConnector是java传过来的见图1,同时要在java侧创建一个toLowerCase方法见图2
        javaConnector.toLowerCase("5656");
    }
</script>
</body>
</html>

3.效果
在这里插入图片描述
在这里插入图片描述

其他:
在这里插入图片描述图1
在这里插入图片描述

图2

java完整代码

package sample;

import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.text.Font;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebEvent;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;


import java.io.File;
import java.net.URL;


public class Main extends Application {
    private JavaConnector javaConnector = new JavaConnector();
    private JSObject javascriptConnector;
    @Override
    public void start(Stage primaryStage) throws Exception {
        // Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        GridPane gp = new GridPane();

        Button bt = new Button("go");
        //BackgroundFill 第2个参数值越大,按钮就显得越圆,第3个参数值越大,按钮就显得越扁
//        bt.setBackground(new Background(new BackgroundFill(Color.RED,new CornerRadii(10),new Insets(1))));
//        bt.setBackground(new Background(new BackgroundFill(Color.web("#2196f3"), new CornerRadii(10), new Insets(0))));
//        //设定字体颜色
//        bt.setTextFill(Paint.valueOf("white"));
//        //设定字体大小
//        bt.setFont(Font.font(18));
        //设定bt的id为ok
        bt.setId("button1");

        Button bt1 = new Button("go1");
        bt1.getStyleClass().add("num-button");

        URL url = new File("E:\\project\\javafx\\src\\sample\\htmlfile.html").toURI().toURL();
        WebView webView = new WebView();
        final WebEngine webEngine = webView.getEngine();
        webEngine.load(url.toString());
        webView.setPrefHeight(300);
        webView.setPrefWidth(300);
        webEngine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> {
            if (Worker.State.SUCCEEDED == newValue) {
                System.out.printf("11111");

                JSObject window = (JSObject) webEngine.executeScript("window");
                window.setMember("javaConnector", javaConnector);

                javascriptConnector = (JSObject) webEngine.executeScript("getJsConnector()");
                javascriptConnector.call("cc","from java");
            }
            System.out.printf(newValue+"");
        });
        //当您在javascript中使用alert()函数时,JavaFX WebView不会在视觉上显示弹出窗口,而是会引发一个Java事件,您可以这样处理
        webView.getEngine().setOnAlert((WebEvent<String> wEvent) -> {
            System.out.println("JS alert() message: " + wEvent.getData());
        });

        gp.add(bt, 0, 0);
        gp.add(bt1, 0, 1);
        gp.add(webView,0,2);

        gp.setAlignment(Pos.TOP_CENTER);
        //设置元素之间竖向的间距
        gp.setVgap(23);
        //设置gridpane的padding
        gp.setPadding(new Insets(20));
        //这设置没效果不知道怎么回事?
        GridPane.setMargin(gp, new Insets(20));

        Scene sc = new Scene(gp, 600, 600);
        //加载外部样式表
        Application.setUserAgentStylesheet(getClass().getResource("my_cool_skin.css")
                .toExternalForm());

        primaryStage.setTitle("Hello World");
        primaryStage.setScene(sc);
        primaryStage.show();
    }


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

    public class JavaConnector {
        /**
         * 让JavaScript调用的方法
         *
         * @param value 网页传过来的值
         */
        public void toLowerCase(String value) {
            System.out.println(value);
            if (null != value) {
                // 这里收到了JavaScript传来的数据,再传送一个值回去给JavaScript
               // javascriptConnector.call("showResult", value.toLowerCase());
                System.out.printf("123123123123");
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值