目录结果
- ide中新建javafx项目
- 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");
}
}
}
}