Java: desarrollo gráfico con JFrame y JComponent

Buenos días,


Tengo que desarrollar un juego en java, concretamente una versión simplificada del R-Type. Había pensado en crearme una ventana JFrame, e ir añadiendo cada componente, los cuales serían JComponents.


De esta forma, tendría un JComponent para el fondo, otro para la nave del jugador y uno por cada marciano.


En cambio, esto no me termina de funcionar, pues dependiendo de donde especifique el setStize del JFrame se visualiza o solo el fondo, o el fondo en un tamaño ínfimo y la nave del personaje.


Mis clases son las siguientes:

public class Ventana extends JFrame {
public Ventana (){
    this.setSize(1000, 600); --> Si solo pongo esta línea solo veo la nave en una ventana gris minimizada.
    DrawBackground();
    this.setSize(1000, 600); --> Si solo pongo esta línea solo veo el fondo en el tamaño especificado
    drawSpacecraft();
    this.setSize(1000, 600); --> Si solo pongo esta línea solo veo la nave en una ventana gris del tamaño especificado
    pack();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);
}
public void drawSpacecraft() {
    add(New Background());
}
public void drawBackground() {
    add(New Spacecraft());
}
public class Background extends JComponent {
    protected void paintComponent(Graphics g)
    {
        super.paint(g);
        Toolkit t = Toolkit.getDefaultToolkit ();
        Image imagen = t.getImage ("imagen2.jpg");
        g.drawImage (imagen, 0, 0, this);
    }
}
public class Spacecraft extends JComponent {
    protected void paintComponent(Graphics g)
    {
        super.paint(g);
        Toolkit t = Toolkit.getDefaultToolkit ();
        Image imagen = t.getImage ("imagen1.jpg");
        g.drawImage (imagen, 10, 10, this);
    }
}
}                

Por que no me sale correctamente el fondo aplicado a toda la ventana y la nave encima?? Como puedo superponer componentes en un JFrame??

Es correcta la orientación que le he dado, la de JComponents?? O debería haber hecho las cosas de otra forma??? Independientemente, hay algún problema con que lo haga así??

Muchas gracias,

Un saludo

Añade tu respuesta

Haz clic para o