从另一个Applet启动另一个Applet

时间:2013-03-09 14:54:57

标签: java applet japplet

我制作了一个Loader Applet,它向用户致意,当用户点击该Applet上显示的按钮时,它会启动主applet,并且Loader Applet将被销毁。

但点击另一个小程序时没有启动!

Loader Applet:

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;

public class Loader extends JApplet implements ActionListener{
    Display secondApplet;
    Button button;

    @Override
    public void init() {
        setSize(800,600);
    }

    @Override
    public void start() {
        setLayout(new FlowLayout());
        button = new Button ("Click me !!");
        add(button);
        button.addActionListener(this);
    }

    @Override
    public void paint(Graphics g) {

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        secondApplet = (Display)getAppletContext().getApplet("Display");
        if (secondApplet != null) {
            secondApplet.init();
            secondApplet.start();
        }
        else {
            System.out.println("Not Running\n");
        }
    }
}

显示小程序:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JApplet;

public class Display extends JApplet {

    @Override
    public void init() {
        setSize(600,400);
    }

    @Override
    public void paint(Graphics g) {
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
    }
}

如何创建其他Applet的实例并销毁当前的Applet !!

3 个答案:

答案 0 :(得分:3)

由于Applet / JApple本身就是 java.awt.Panel ,因此您可以将其中一个嵌入到另一个中,根据您的具体情况,您可以将显示嵌入到< strong> Loader 使用 Loader 中的Panel重新加载显示

这样的事情:

Panel container = new Panel();
container.setLayout(new GridLayout(1,0));
container.add(secondApplet); //Display Applet
add(container):

secondApplet.init();
secondApplet.start();

button.setVisible(false);

答案 1 :(得分:2)

小程序有很多问题,很难知道从哪里开始。但是,让我们首先集中讨论一个更合理的策略,以便在一个视图和另一个视图之间进行更改。

  1. 不是拥有两个小程序,而是在CardLayout
  2. 中交换两个面板
  3. 不要将两个小程序放在一个页面中,而是调用getAppletContext().showDocument(secondAppletURL);。据推测,secondAppletURL与托管第一个小程序的页面的URL不同。
  4. 好的 - 第一个小程序的问题:

    1. 不要尝试设置applet的大小。它由HTML设置。
    2. start()方法中的所有方法调用都应移至init()方法,因为可能会重复调用start()方法。然后没有理由完全覆盖start()
    3. 不要混合Swing(例如JApplet)&amp; AWT(例如Button)组件没有正当理由。在这种情况下,请使用JButton代替Button
    4. 作为一个风格点,通常最好创建匿名内部ActionListener而不是在父类上实现它。
    5. 使用空实现覆盖paint()并不是一个好主意。原始的paint()绘制了applet和组件,所以现在它什么都不做。
    6. actionPerformed()中的方法同样荒谬。在AppletContext&amp;之后,小程序才会被包含在init()中已调用start(),这意味着显式调用这些方法会导致第二次调用它们。虽然start()方法要多次调用,但init()方法只应调用一次。
    7. 第二个小程序。

      1. Ditto point 1. re the 1st applet。
      2. 被覆盖的paint()方法...将绘制BG颜色(或FG颜色 - 不确定),但没有别的。同样,不要覆盖它。

答案 2 :(得分:1)

尝试使用此方法加载另一个小程序。看看它是否有效。

Class applet2 = Class.forName("Applet2");
Applet appletToLoad = (Applet)applet2.newInstance();
appletToLoad.setStub(this);
setLayout(new GridLayout(1,0));
add(appletToLoad);
appletToLoad.init();
appletToLoad.start();