How can I use SwingExplorer to navigate Applet con

2019-03-06 16:57发布

问题:

There is SwingExplorer tool from this site http://www.swingexplorer.com/ that used to navigate swing content but how do I apply it to Applet?,especially if I want to integrate it to eclipse-plugin how do I configure the running configuration?

I guess that you need to supply the parameter of the applet that you want to run to AppletViwer and let the SwingExplorer navigate the AppletViewer(which in turn run your applet class) but i don't know how to pass such parameter to AppletViwer,Can anyone explain me how to do this?

Note that simply create new frame on top of applet and let it run as usual Swing application will not do because it need to be operated in browser-like environment.

回答1:

It is possible to provide a basic applet stub for an applet that is being hosted in a frame (a desktop app.). Several methods of the applet context are easy to reproduce in an application. The others are either harder, impractical to implement easily, or not relevant to a desktop based applet.

This example can be run as either an applet embedded in HTML or the applet viewer, or as an applet embedded in a desktop component (specifically a JOptionPane since the code is shorter).

The example was adapted from one in which the OP was more interested in the applet parameters. This version also adds support for reporting the document and code base.

/*
<applet code='DesktopEmbeddedApplet' width='400' height='100'>
<param name='param' value='embedded in applet viewer or the browser'>
</applet>
*/
import java.applet.*;
import java.awt.*;
import javax.swing.*;
import java.io.File;
import java.net.URL;
import java.util.HashMap;

public class DesktopEmbeddedApplet extends JApplet {

    public void init() {
        setLayout(new GridLayout(0,1));
        String param = getParameter("param");
        System.out.println("parameter: " + param);
        add(new JLabel(param));
        add(new JLabel("" + getDocumentBase()));
        add(new JLabel("" + getCodeBase()));
    }

    public static void main(String[] args) {
        ApplicationAppletStub stub = new ApplicationAppletStub();
        stub.addParameter("param", "embedded in application");
        DesktopEmbeddedApplet pa = new DesktopEmbeddedApplet();
        pa.setStub(stub);

        pa.init();
        pa.start();
        pa.setPreferredSize(new java.awt.Dimension(400,100));
        JOptionPane.showMessageDialog(null, pa);
    }
}

class ApplicationAppletStub implements AppletStub {

    HashMap<String,String> params = new HashMap<String,String>();

    public void appletResize(int width, int height) {}
    public AppletContext getAppletContext() {
        return null;
    }

    public URL getDocumentBase() {
        URL url = null;
        try {
            url = new File(".").toURI().toURL();
        } catch(Exception e) {
            System.err.println("Error on URL formation!  null returned." );
            e.printStackTrace();
        }
        return url;
    }

    public URL getCodeBase() {
        URL url = null;
        try {
            url = new File(".").toURI().toURL();
        } catch(Exception e) {
            System.err.println("Error on URL formation!  null returned." );
            e.printStackTrace();
        }
        return url;
    }

    public boolean isActive() {
        return true;
    }

    public String getParameter(String name) {
        return params.get(name);
    }

    public void addParameter(String name, String value) {
        params.put(name, value);
    }
}