Вставьте сторонний JApplet в графический интерфейс Swing и передайте его параметры - PullRequest
6 голосов
/ 25 мая 2011

Есть сторонний апплет, который я хотел бы встроить в мое приложение Swing. По сути, я бы хотел, чтобы это была просто еще одна панель. Этот апплет использует много параметров, например

final String config_filename = getParameter(XXX);

Я видел много документации о том, как отправлять значения параметров через HTML, но как вы делаете это с помощью кода (или, возможно, файлов свойств)? Любая помощь будет оценена!

Ответы [ 2 ]

13 голосов
/ 26 мая 2011

Реализуйте AppletStub и установите его как заглушку экземпляра апплета.EG

/*
<applet code='ParamApplet' width='200' height='200'>
<param name='param' value='foo'>
</applet>
*/
import java.applet.*;
import javax.swing.*;
import java.net.URL;
import java.util.HashMap;

public class ParamApplet extends JApplet {

    public void init() {
        String param = getParameter("param");
        System.out.println("parameter: " + param);
        add(new JLabel(param));
    }

    public static void main(String[] args) {
        ApplicationAppletStub stub = new ApplicationAppletStub();
        stub.addParameter(args[0], args[1]);
        ParamApplet pa = new ParamApplet();
        pa.setStub(stub);

        pa.init();
        pa.start();
        pa.setPreferredSize(new java.awt.Dimension(200,200));
        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() {
        return null;
    }

    public URL getCodeBase() {
        return null;
    }

    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);
    }
}

Типичный ввод / вывод

prompt>java ParamApplet param "apples & oranges"
parameter: apples & oranges

prompt>java ParamApplet param 42
parameter: 42

prompt>
6 голосов
/ 26 мая 2011

Для полной среды апплета вы должны реализовать AppletContext и AppletStub (см. Эндрю ответ для минимального примера), а затем передать последний в setStub вашего апплета создание экземпляра с помощью конструктора. Вы также должны позаботиться о вызове методов жизненного цикла апплета init(), start(), stop() и destroy() (после установки заглушки апплета).

Метод Applet.getParameter() просто делегирует заглушку апплета, поэтому в вашем особом случае может быть достаточно только реализовать AppletStub (необходимые методы) и передать его, опуская AppletContext. Вы также можете обойтись без вызова некоторых или даже всех методов жизненного цикла.

...