Tentando mudar de applet para JFrame

EkLuthra:

Então, eu estou fazendo um jogo e eu quero mudar isso a partir de um applet para um JFrame, como todos os meus outras classes usar JFrames. No entanto, eu continuo recebendo um monte de erros em tempo de execução que eu não entendo que seja.

Tenho principalmente tentou apenas substituindo onde diz extends Appletque 'se estende JFrame', bem como fazer uma outra classe onde faz um JFrame que contém tudo sobre o jogo, como o fundo, movimento, literalmente, todo jogo.

Esta é uma das classes, aquele no qual eu declaro um JFrame que contém o resto do jogo:

public class SpaceGame{
     JFrame frame = new JFrame("Space Shooter");
     AlienAttack alienAttack = new AlienAttack();
     public SpaceGame(){
          frame.setBounds(320, 25, 1000, 650);
          frame.setResizable(false);
          frame.setVisible(true);
          frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
          frame.add(alienAttack);
     }
}

Aqui está a classe AlienAttack que você vê acima:

public class AlienAttack extends JFrame implements KeyListener, Runnable
{
  double xVel; double yVel; final double SPEED = 0.02;
  Thread thread;
  int direction;
  double x, y;
  final double FRICTION = 0.98;
  boolean upAccel, downAccel, leftAccel, rightAccel;
  ArrayList<Shot> shots;
  ArrayList<Alien> aliens;
  boolean shipActive;

  public void init(){
    x=475;
    y=300;
    direction = 1;
    xVel = 0; yVel = 0;
    shipActive = true;
    upAccel = false; downAccel = false; leftAccel = false; rightAccel = false;
    shots = new ArrayList<Shot>();
    aliens = new ArrayList<Alien>();
    this.addKeyListener(this);
    thread = new Thread(this);
    thread.start();
  }

Há mais do que isso, mas essa é a coisa que eu acho que é relevante. BTW, Shote Alienoutras classes, eu uso os do ArrayLists.

Alguns dos erros que recebo são:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container

(Essa é a principal delas)

t java.awt.Container.checkNotAWindow(Unknown Source)
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at javax.swing.JFrame.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at SpaceGame.<init>(SpaceGame.java:11)
    at TestingGrounds$SnakeHandler.actionPerformed(TestingGrounds.java:82)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)

Isso é como metade deles lol

GhostCat saudações Monica C.:

Simples:

JFrame frame = new JFrame("Space Shooter");

e

frame.add(alienAttack);

Você simplesmente não pode simplesmente adicionar outro JFrame em seu primeiro.

Coisa é: qualquer quadro GUI vem com um monte de complexidade. Como consequência: programação por tentativa e erro não é uma estratégia razoável.

Portanto, a verdadeira resposta é: passo para trás. Você não deve fazer qualquer coisa porque você assumir que você pode fazer isso. Você tem que gastar as horas que ele necessita para entender o que você está fazendo.

No seu caso: balanço pesquisa. O oráculo tutoriais são um bom ponto de partida. Simplesmente falado: lê-los, de cima para baixo. Leia o código de exemplo, copiá-lo, e fazer experimentos com base nesse código de trabalho. Então, quando você é o suficiente proficiente com Swing para "andar em seu nas pernas", em seguida, voltar e olhar para a estrutura do seu aplicativo baseado na aplicação atual. Aplicar as coisas que você aprendeu, e dissecar o que você tem para essas peças que você pode, em seguida, re-utilização de uma aplicação Swing.

Dependendo do contexto, isso pode ser bastante fácil, tais como: decidir o que seu frame "main" (janela) deve ser, para em seguida, descobrir como adicionar as outras coisas. Eu acho que uma primeira tentativa seria de cerca de mudar sua AlienAttack de ser um JFrame para ser um JPanel. Você pode adicionar painéis para um quadro, não frames!

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=332177&siteId=1
Recomendado
Clasificación