【问题标题】:Embed a 3rd-party JApplet in a Swing GUI & pass it parameters在 Swing GUI 中嵌入第 3 方 JApplet 并传递参数
【发布时间】:2011-09-02 01:21:55
【问题描述】:

我想在我的 Swing 应用程序中嵌入一个第三方小程序。基本上,我希望它只是另一个面板。这个小程序使用了很多参数,例如

final String config_filename = getParameter(XXX);

我已经看过很多关于如何通过 HTML 发送参数值的文档,但是您如何通过代码(或者可能是属性文件)来做到这一点?任何帮助将不胜感激!

【问题讨论】:

    标签: java swing parameters applet japplet


    【解决方案1】:

    实现AppletStub 并将其设置为小程序实例的存根。例如

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

    典型 I/O

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

    【讨论】:

    • 效果很好,谢谢!你的答案和 Paŭlo 的答案都很好,但我选择了你的答案,因为它几乎是万无一失的。为你们俩干杯!
    【解决方案2】:

    对于完整的小程序环境,您必须实现 AppletContextAppletStub(请参阅 Andrew's answer 以获取最小示例),然后在使用构造函数。您还应该注意调用小程序的生命周期方法init()start()stop()destroy()(在设置小程序存根之后)。

    Applet.getParameter() 方法只是委托给小程序存根,因此在您的特殊情况下,仅实现 AppletStub(它所需的方法)并传递它,省略 AppletContext 可能就足够了。您也可以不调用部分甚至全部生命周期方法而侥幸逃脱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2014-08-12
      • 2021-01-06
      相关资源
      最近更新 更多