Не отображается JLabel?
Подскажите пожалуйста, как исправить код, чтобы отображался JLabel pacmanLabel
. Дело не в пути к файлу, тут он у меня полный. Дело в Layout
. Поэкспериментировала, картинка отображается только тогда, когда поменять Layout
в mazePanel
на new BorderLayout()
. Но тогда у меня плывет весь общий вид, я уже запуталась, если честно в них, поэтому прошу помощи у вас. Мне нужно чтобы сначала шла mazePanel
, под ней находилась infoPanel
, а иконка персонажа pacmanLabel
находилась на mazePanel
. Заранее благодарю
import javax.swing.*;
import java.awt.*;
public class GamePanel extends JPanel {
JLabel pacmanLabel;
MazePanel mazePanel;
JPanel infoPanel;
GamePanel() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setTitle("Pacman");
frame.setPreferredSize(new Dimension(480, 600));
frame.setLayout(new BorderLayout());
mazePanel = new MazePanel();
mazePanel.setBounds(0,0,480,650);
ImageIcon pacmanIcon = new ImageIcon("/Users/aleksandraselivanova/Desktop/Pacman/Pacman-2.png");
pacmanLabel = new JLabel(pacmanIcon);
pacmanLabel.setBounds(50, 50, 33, 33);
// pacmanLabel.setLocation(50,50);
infoPanel = new JPanel();
infoPanel.setPreferredSize(new Dimension(480, 50));
infoPanel.setBackground(Color.BLACK);
infoPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
JLabel scoreLabel = new JLabel("Score: 0");
scoreLabel.setForeground(Color.WHITE);
JLabel livesLabel = new JLabel("Lives: 3");
livesLabel.setForeground(Color.WHITE);
frame.add(mazePanel);
frame.add(infoPanel, BorderLayout.SOUTH);
mazePanel.add(pacmanLabel,100);
infoPanel.add(scoreLabel);
infoPanel.add(livesLabel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
public class MazePanel extends JPanel {
private final int unitSize = 30;
private final int[][] mazePanel = {
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
{1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
{1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1},
{1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1},
{1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1},
{1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}
};
MazePanel(){
setLayout(null);
setPreferredSize(new Dimension(unitSize * mazePanel[0].length, unitSize * mazePanel.length));
setOpaque(true);
createMazePanels();
}
private void createMazePanels() {
JPanel[][] panels = new JPanel[mazePanel.length][mazePanel[0].length];
for (int i = 0; i < mazePanel.length; i++) {
for (int j = 0; j < mazePanel[i].length; j++) {
panels[i][j] = new JPanel();
panels[i][j].setPreferredSize(new Dimension(unitSize, unitSize));
if (mazePanel[i][j] == 1) {
panels[i][j].setBackground(Color.BLUE);
} else {
panels[i][j].setBackground(Color.BLACK);
}
panels[i][j].setBounds(j * unitSize, i * unitSize, unitSize, unitSize);
add(panels[i][j]);
}
}
}
}