我制作了一个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 !!
答案 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)
小程序有很多问题,很难知道从哪里开始。但是,让我们首先集中讨论一个更合理的策略,以便在一个视图和另一个视图之间进行更改。
CardLayout
getAppletContext().showDocument(secondAppletURL);
。据推测,secondAppletURL
与托管第一个小程序的页面的URL不同。好的 - 第一个小程序的问题:
start()
方法中的所有方法调用都应移至init()
方法,因为可能会重复调用start()
方法。然后没有理由完全覆盖start()
。JApplet
)&amp; AWT(例如Button
)组件没有正当理由。在这种情况下,请使用JButton
代替Button
。ActionListener
而不是在父类上实现它。paint()
并不是一个好主意。原始的paint()
绘制了applet和组件,所以现在它什么都不做。actionPerformed()
中的方法同样荒谬。在AppletContext
&amp;之后,小程序才会被包含在init()
中已调用start()
,这意味着显式调用这些方法会导致第二次调用它们。虽然start()
方法要多次调用,但init()
方法只应调用一次。第二个小程序。
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();