Как я могу использовать SwingExplorer для навигации по содержимому апплета?

Существует инструмент SwingExplorer с этого сайта http://www.swingexplorer.com/ который используется для навигации по содержимому свинга, но как мне применить его к апплету?, особенно если я хочу интегрировать его в eclipse-plugin, как мне настроить запущенный конфигурация?

Я предполагаю, что вам нужно предоставить параметр апплета, который вы хотите запустить, в AppletViwer и позволить SwingExplorer перемещаться по AppletViewer(который, в свою очередь, запускает ваш класс апплета), но я не знаю, как передать такой параметр в AppletViwer, может кто-нибудь объяснит мне, как это сделать?

Обратите внимание, что просто создать новый фрейм поверх апплета и позволить ему работать как обычно, приложение Swing не подойдет, потому что оно должно работать в среде, подобной браузеру.

1 ответ

Решение

Можно предоставить базовую заглушку апплета для апплета, который размещается во фрейме (настольное приложение). Несколько методов контекста апплета легко воспроизвести в приложении. Другие либо сложнее, непрактичны в реализации, либо не имеют отношения к апплету на рабочем столе.

Этот пример можно запустить как апплет, встроенный в HTML или средство просмотра апплета, или как апплет, встроенный в компонент рабочего стола (в частности, JOptionPane так как код короче).

Пример был адаптирован из примера, в котором OP больше интересовались параметрами апплета. В этой версии также добавлена ​​поддержка отчетности по документу и кодовой базе.

/*
<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);
    }
}
Другие вопросы по тегам