我有一个 Java 小程序。
用户在 Java 小程序控件中输入数据后,他按下 Java 小程序中的按钮,Java 小程序执行一些计算,结果是一个表格(为简单起见,表格可以视为 String[][]
)。
我想显示新的浏览器窗口并在其中将此表格输出为 html <table>
.
如何才能做到这一点?
首选方法是在需要时使用 javascript,但不涉及一些服务器端处理。
最佳答案
好吧,必须使用 JavaScript 来打开窗口并填充 HTML - 这是小程序根本无法访问的内容。
幸运的是,JavaScript 可以轻松调用您的 Java 小程序提供的任何公共(public)方法。不幸的是,Java 不能向 JavaScript 返回一个 String[][],但它可以返回一个 String。
所以您可以做的是让您的 Java 小程序返回 String[][] 数组的 JSON 序列化。然后 JavaScript 可以使用 JSON.parse 函数将该 JSON 转换为 JavaScript 数组(在大多数现代浏览器上可用,但在 json.org 也有可用的库)
下面是我正在谈论的示例(至少适用于 Java 5 和 Chrome):
小程序代码
import java.applet.*;
public class Test extends Applet {
String data[][];
public void init() {
data = new String[5][2];
data[0] = new String[] { "Peter", "Griffin"};
data[1] = new String[] { "Glen", "Quagmire"};
data[2] = new String[] { "Joe", "Something"};
data[3] = new String[] { "Cleveland", "Brown"};
data[4] = new String[] { "Buzz", "Killington"};
}
public String getData() {
return toJSON(data);
}
/* Quick and dirty, you may want to look
* online for a 'complete' converter
*
* This returns [["Peter", "Griffin"], ["Glen", "Quagmire"], ... etc
*/
protected String toJSON(String data[][]) {
int x, y;
String s = "[";
for (y = 0;y < data.length;y += 1) {
s += "[";
for (x = 0;x < data[y].length;x += 1) {
s += "\""+data[y][x].replaceAll("\"","\\\"")+"\"";
if (x < data[y].length-1) {
s += ", ";
}
}
s += "]";
if (y < data.length-1) {
s += ", ";
}
}
s += "]";
return s;
}
}
JavaScript 代码
<html>
<body>
<p><applet id="applet" code="Test"></applet></p>
<input id="button" type="button" value="Click me"/>
<script type="text/javascript">
(function () {
var button = document.getElementById("button"), applet = document.getElementById("applet");
button.onclick = function () {
var html = [], newWindow, data = JSON.parse(applet.getData()), j;
html.push("<table><tr><th>First Name</th><th>Last Name</th></tr>");
for (j = 0;j < data.length;j += 1) {
html.push("<tr><td>"+data[j][0]+"</td><td>"+data[j][1]+"</td></tr>");
}
html.push("</table>");
newWindow = window.open();
newWindow.document.firstChild.innerHTML = html.join("");
};
}());
</script>
如果您需要进一步说明,请告诉我!
关于java - 包含 Java 小程序生成的信息的新浏览器窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1780259/