Java - Problema con la visualización de dos clases de dos clases en un JPanel.

 
Vista:
sin imagen de perfil

Problema con la visualización de dos clases de dos clases en un JPanel.

Publicado por johan (1 intervención) el 01/09/2022 02:04:57
En este momento estoy trabajando de un proyecto personal, el cual es un juego parecido a los juegos donde el objetivo es destruir un número de ladrillos con una bola rebotando en una plataforma en la parte inferior.

Estoy usando la librería Graphics para pintar los sprites del juego (la bola y el rectángulo) estos están divididos en dos clases diferentes y heredan de JPanel.

1
2
3
4
5
6
7
8
9
10
11
12
import java.awt.Color;
import javax.swing.JPanel;
import java.awt.Graphics;
 
public class Rectangulo extends JPanel{
    @Override
    public void paintComponent(Graphics gr){
        super.paintComponent(gr);
        gr.fillRect((500 - 200)/2, 1000, 200, 20);
        gr.setColor(Color.white);
    }
}
Este es mismo código para el sprite de la bola (solo que en vez de usar el método fillRect uso fillOval y con ciertas variaciones en las medidas y la posición de la bola, claro). Al inicio mi idea era poner los sprites directamente en el JFrame, pero al hacer esto solo se veía uno de los dos.
Entonces se me ocurrio usar un JPanel como fondo y funcionó... Más o menos, porque si bien ahora se ven los dos sprites, no se ven ni de la forma correcta ni en la posición correcta.

imagen_2022-09-01_020132369

Esos dos cuadrados son el rectángulo y la bola, pero no sé que puede causar ese posicionamiento de las figuras.

También les comparto el código de la pantalla para que puedan ver como está montado el proyecto,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import graficos.Bola;
import graficos.Rectangulo;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class PantallaJuego extends JFrame implements KeyListener{
    JPanel fondo = new JPanel();
    Rectangulo rectangulo = new Rectangulo();
    Bola bola = new Bola();
 
    public PantallaJuego(){
        setBackground(Color.black);
        setSize(500, 700);
        setUndecorated(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setLocationRelativeTo(null);
 
        fondo.setBackground(Color.black);
        fondo.setSize(200, 700);
 
        getContentPane().add(fondo);
        fondo.add(rectangulo);
        fondo.add(bola);
 
        addKeyListener(this);
        setFocusable(true);
    }
 
    @Override
    public void keyTyped(KeyEvent e) {
        if (e.getKeyChar() == 'a' || e.getKeyChar() == 'A'){
            rectangulo.setLocation(rectangulo.getX() - 5, rectangulo.getY());
        }
 
        if (e.getKeyChar() == 'd' || e.getKeyChar() == 'D'){
            rectangulo.setLocation(rectangulo.getX() + 5, rectangulo.getY());
        }
    }
 
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyChar() == 'a' || e.getKeyChar() == 'A'){
            rectangulo.setLocation(rectangulo.getX() - 5, rectangulo.getY());
        }
 
        if (e.getKeyChar() == 'd' || e.getKeyChar() == 'D'){
            rectangulo.setLocation(rectangulo.getX() + 5, rectangulo.getY());
        }
    }
 
    @Override
    public void keyReleased(KeyEvent e) {
        if (e.getKeyChar() == 'a' || e.getKeyChar() == 'A'){
            rectangulo.setLocation(rectangulo.getX() - 5, rectangulo.getY());
        }
 
        if (e.getKeyChar() == 'd' || e.getKeyChar() == 'D'){
            rectangulo.setLocation(rectangulo.getX() + 5, rectangulo.getY());
        }
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder