我在这里编程很新。
我有一个复杂的JApplet,可以自己快乐地运行,但是出于项目的目的,我希望在另一个JApplet中单击一个按钮时在新窗口中打开它。我听说过这样做的一种方法是将JApplet变成JPanel的扩展,然后像往常一样将JPanel添加到其他应用程序。 (在这种情况下,将其粘贴在JFrame中)。
然而,当我尝试这个时,我在编译时遇到了这个错误:
.\Puzzle.java:241: error: cannot find symbol
wall = getImage(getCodeBase(),"metalcrate.jpg");
^
symbol: method getCodeBase()
location: class Puzzle
.\Puzzle.java:267: error: cannot find symbol
goal = getImage(getCodeBase(), "redxicon.png");
^
symbol: method getCodeBase()
location: class Puzzle
2 errors
这一直在运行:
java.lang.IllegalArgumentException: adding a window to a container
at java.awt.Container.checkNotAWindow(Container.java:488)
at java.awt.Container.addImpl(Container.java:1089)
at java.awt.Container.add(Container.java:1003)
at javax.swing.JApplet.addImpl(JApplet.java:315)
at java.awt.Container.add(Container.java:415)
at Test.init(Test.java:27)
at sun.applet.AppletPanel.run(AppletPanel.java:434)
at java.lang.Thread.run(Thread.java:745)
这是其他applet如何将这个作为JPanel / JFrame打开的要点。我试图转换的applet的代码很长,所以我不确定我是否应该在这里完整地发布它。但是,它使用ActionEvents和ItemEvents,从文件中绘制图像,以及空布局(这是Rushhour游戏的粗略版本),我想知道这是否可能是问题的一部分。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test extends JApplet implements ActionListener
{
JButton play;
JFrame newWindow;
Puzzle testpanel;
public void init()
{
setLayout(new FlowLayout());
play = new JButton("Play!");
play.addActionListener(this);
add(play);
testpanel = new Puzzle();
newWindow = new JFrame ("test frame");
newWindow.setBounds(50, 50, 700,600 );
newWindow.add(testpanel);
newWindow.pack();
newWindow.setVisible(true);
add(newWindow);
}
public void actionPerformed (ActionEvent ae)
{
Object src = ae.getSource();
if (src == play)
newWindow.setVisible(false);
}
}
我在这里做错了什么?是否有更简单的方法来达到同样的效果?