Byta ut komponent i en container [java]

Permalänk
Medlem

Byta ut komponent i en container [java]

Jag håller på att skriva ett spel.
Jag har en GamePanel som håller reda på vilken level som exekveras. Varje level-objekt implementerar Runnable och kör på egen tråd. Men jag lyckas inte ritkigt få det att fungera.
Först skapar jag level1. (Levelx ärver från Level)

level = new Level1(this); //this är denna GamePanel
add(level); // lägg till i fönstret
level.start(); // tråden i level1 startar och dess run-metod kör tills man klarat level1. I slutet av run-metoden anropas levelFinished() i den här GamePanel.

i levelFinished() metoden:
remove(level);
level = new Level2(this);
add(level);
level.start();
.
.
.

problemet är att när jag klarat leveln och tråden inte längre aktiv, så hoppar den till levelFinished, precis som den skall (har testat med utskrifter), men det kommer inte upp någon ny level i fönstret. Utan det gamla står kvar som det var när man klarade den. (Level objektet ärver från JPanel)

Gör jag fel nånstans?
Går det inte att byta ut komponenten?
Om jag börjar med level2 istället så är det ju klart den som hamnar i fönstret i stället...men det hjälper ju inte

Visa signatur

// Yonder

Permalänk
Medlem

jag kanske är helt ute och cuklar här, men har du skrivit remove() och add() själv? i så fall, hur ser dom ut?

Visa signatur

Have you witnessed the power of the Twisted Rune?
Linux är bara gratis om din tid är värdelös.

Permalänk
Medlem

remove(Component c) och add(Component c) är metoder ärvda från Component

Visa signatur

// Yonder

Permalänk
Medlem

Antagligen också ute och cyklar. Men du måste kanske rita om GamePanel efter att bytt ut en tillagd panel?

Visa signatur

"And even tho the computer was off and unplugged, an image stayed on the screen! It was.. THE WINDOWS LOGO!"
- Bender

Permalänk
Medlem

Fungerade inte heller... nu blev det helt tomt när jag requestar repaint()...

public class GamePanel extends JPanel {
private Level level;

public GamePanel() {
level = new Level1(this);
add(level);
}

public void startGame() {
level.requestFocus();
level.start();
}

public void levelFinished() {
remove(level);
level = new Level2(this);
add(level);
repaint();
startGame();
}
}

Visa signatur

// Yonder