gpt4 book ai didi

javascript - JAVA FX + Javascript

转载 作者:行者123 更新时间:2023-12-05 08:42:27 25 4
gpt4 key购买 nike

我从未使用过 JavaFX,但现在我需要编写一个将嵌入浏览器的小型应用程序,我需要将一些数据传递给浏览器并从浏览器取回一些数据。正如我所读到的,我需要 JavaScript 作为交换数据的桥梁。我已经尝试了很多这样的例子:

http://knowles.co.za/javafx-and-javascript-calling-java-from-javascript/

http://www.java2s.com/Code/Java/JavaFX/WebEngineLoadListener.htm

但我什么也做不了。

有人能给我举个例子吗?

最佳答案

我想你问的是javaFX 和 JavaScript 之间的交互

首先这个操作是通过Nashorn引擎来执行的

让我们看一个简单的例子,写出它的完整代码:

一道题:我们想用javafx、JS、html求两个数的和

假设我们有 HTML

  1. 两个输入字段从用户那里获取值
  2. 计算字段数字总和的按钮
  3. 我们在其中预览数字总和的 div

当用户点击按钮时,它会调用一个 JavaScript 函数,该函数调用一个 java 方法(即:java 方法)接收两个数字并返回总和

所以让我们创建一个 java 类,它有一个计算两个数字之和的方法,非常简单

public class Adder{

public double getSum(String a, String b)
{
return Double.parseDouble(b) + Double.parseDouble(a);
}}

所以我们需要传递(注入(inject))一个java对象给javascript,这样我们就可以用它来调用方法,那么如何将java对象注入(inject)到JS中呢?只需使用以下代码

WebView browser = new WebView();
browser.getEngine().getLoadWorker()
.stateProperty()
.addListener((obs, old, neww) ->
{
if (neww == Worker.State.SUCCEEDED)
{
JSObject jsobj = (JSObject) browser.getEngine()
.executeScript("window");
jsobj.setMember("adder", new Adder());
}
});

我们在最后一行注入(inject)了一个 java 对象(new Adder() ),并给它起一个名字(adder),以便在 java 脚本代码中使用,所以现在的问题是如何在 JavaScript 中使用 adder?

考虑以下 JavaScript 函数并将其命名为 add

function add()
{
var sum = adder.getSum("5", "7");
}

如我们所见,非常简单,我们只是调用传递(注入(inject))的 java 对象(Adder 对象),但名称为 adder 并调用方法 getSum("5","7")

现在让我们有一个完整的代码

1- 在您的 IDE 中创建一个新的 JavaFX 项目并将主类命名为 NashornTest,代码如下

import javafx.application.Application;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class NashornTest extends Application{

@Override

public void start(Stage stage)
{

//create an embeded web browser
WebView browser = new WebView();

browser.getEngine().getLoadWorker()
.stateProperty()
.addListener((obs, old, neww) ->
{
if (neww == Worker.State.SUCCEEDED)
{
// Let JavaScript make calls to adder object,
//so we need to inject an [Adder] object into the JS code
JSObject bridge = (JSObject) browser.getEngine()
.executeScript("window");
bridge.setMember("adder", new Adder());
}
});
//load the html page
browser.getEngine().load(NashornTest.class.getResource("index.xhtml").toString());
VBox box = new VBox(browser);

Scene scene = new Scene(box);
stage.setScene(scene);
stage.show();
}

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

2-创建一个java类并命名为Adder,代码如下

public class Adder{

public double getSum(String a, String b)
{
return Double.parseDouble(b) + Double.parseDouble(a);
}}

3-创建一个 XHTML 文件并命名为 index.xhtml 和这里的脚本,它必须在 NashornTest.java 的同一个 java 包中

<!DOCTYPE html>
<html>
<head>
<title>TODO supply a title</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<script>
function add()
{
var num1 = document.getElementById("num1Field").value;
var num2 = document.getElementById("num2Field").value;
//make calls for injected java object
var sum = adder.getSum(num1, num2);
document.getElementById("outputDiv").innerHTML = "sum = " + sum;
}

</script>
</head>
<body>
<input id="num1Field"/>
<input id="num2Field"/>
<button onclick="add()">sum</button>
<div id="outputDiv"></div>
</body>
</html>

最后,这是 Java 和 JavaScript 之间交互的简单开始,我希望这篇文章对您有所帮助和有用

关于javascript - JAVA FX + Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41654573/

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