将JApplet转换为JPanel以便在另一个类中使用

时间:2014-12-11 19:03:19

标签: java jpanel japplet extending null-layout-manager

我在这里编程很新。

我有一个复杂的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);
    }

}

我在这里做错了什么?是否有更简单的方法来达到同样的效果?

0 个答案:

没有答案