java - 包含 Java 小程序生成的信息的新浏览器窗口

标签 java applet

我有一个 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/

相关文章:

java - "full-page"小程序的 HTML 代码(无 javascript)?

java can system out 导致内存不足问题

java - 将存储过程 PL/SQL 转换为 Java

java - 哪个版本更好?

java - 如果不存在则插入?

javascript - 有什么方法可以将整个网页从不同域加载到我的页面吗?

java - 无法从java中的列表中获取项目

java - 添加到哈希表中的值 [Java]

java - 删除双向链表Java中具有最小值的泛型节点

java - 客户端/服务器套接字与 Applet 的 Windows/Linux 问题