Witam, od jakiegoś czasu uczę się programować w Javie. Chciałem napisać grę, typu Atari Breakout. W tym celu utworzyłem klasę rozszerzającą JFrame:
import javax.swing.*;
import java.awt.*;
public class ActionFrame extends JFrame
{
ActionFrame()
{
super("Brick Breaker 2D");
setPreferredSize(new Dimension(1080,720));
setResizable(false);
JPanel ball = new Ball();
JPanel platform = new Platform();
add(platform);
add(ball);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
}
Oraz dwa JPanele. "Ball" oraz "Platform"
import javax.swing.*;
import java.awt.*;
public class Ball extends JPanel
{
private int x=460, y=550;
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(new Color(220, 220, 220));
g2d.fillOval(x, y, 30, 30);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Platform extends JPanel implements KeyListener
{
private int x=460, y=650;
public Platform()
{
setBackground(new Color(30, 30, 30));
setFocusable(true);
addKeyListener(this);
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(new Color(220, 220, 220));
g2d.fillRect(x, y, 100, 10);
}
@Override
public void keyPressed(KeyEvent evt)
{
char k = evt.getKeyChar();
if(k == 'd')
{
x+=20;
if(x + 20 >= 1030)
x=-50;
}
if(k == 'a')
{
x-=20;
if(x - 20 <= -50)
x=1030;
}
repaint();
}
@Override
public void keyReleased(KeyEvent evt) {
}
@Override
public void keyTyped(KeyEvent evt) {
}
}
Problem pojawia się, gdy w klasie ActionFrame, próbuję dodać i piłkę i platformę, ponieważ wyświetla się tylko ten obiekt, który został dodany ostatni. Kombinowałem trochę z setLayout(), ale nie wyszło.
<code=java></code>