Преобразование JApplet в JPanel для использования в другом классе

Я довольно новичок в программировании здесь.

У меня есть сложный 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)

Это суть того, как другой апплет откроет этот как JPanel/JFrame. Код для апплета, который я пытаюсь преобразовать, довольно длинный, поэтому я не был уверен, стоит ли публиковать его полностью здесь. Однако он использует 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 ответов

Другие вопросы по тегам