Я здесь ошарашен. У меня есть JPanel
(defBoardPanel), что я добавление к родителю JPanel
(GamePanel) следующим образом:JPanel не появляется при добавлении в родительский JPanel
public GamePanel(SetupBoard sb) {
this.setLayout(new BorderLayout());
// this.setBackground(Color.yellow);
JPanel defBoardPanel = new JPanel();
defBoardPanel.setBackground(Color.yellow);
for (int r = 0; r < sb.boardSize; r++){
for (int c = 0; c < sb.boardSize; c++){
Cell c = new Cell(r, c);
c.label.setOpaque(true);
if (sb.getCell(r, c).status == sb.getCell(r,c).status.occupied){
c.label.setBackground(Color.black);
System.out.println("LABEL IS OCCUPIED");
}
else {
c.label.setBackground(Color.white);
}
defBoardPanel.add(c.label);
}
}
defBoardPanel.revalidate();
defBoardPanel.setVisible(true);
this.add(defBoardPanel, BorderLayout.WEST);
this.revalidate();
this.setVisible(true);
Эта панель должна быть добавлена к JFrame (MainFrame), которая показана ниже. Когда приложение запускается, JFrame отображает другой тип Panel (SetupBoard), с помощью которого пользователь устанавливает свою игровую панель. Когда они нажимают «принять», вызывается метод StartGame() MainFrame, который должен показывать JPanels выше.
public MainFrame() {
this.setLayout(new BorderLayout());
this.setSize(500, 500);
SetupBoard sb = new SetupBoard(10, this);
this.setContentPane(sb);
}
void startGame(SetupBoard sb){
GamePanel gp = new GamePanel(sb);
this.setContentPane(gp);
this.revalidate();
}
Моя проблема заключается в том, что дочерняя панель (defBoardPanel) не отображается. Сам экран GamePanel (который я проверил с использованием метода setBackground(Color.yellow)
, который вы видите в комментариях), но не панель, которую я добавил на нее.
Какую тупую ошибку я пропускаю здесь?
РЕДАКТИРОВАТЬ: StartGame() вызывается из класса SetupBoard:
void startGame(){
mf.startGame(this);
}
, где М.Ф. является ссылкой на MainFrame, который создал SetupBoard экземпляр. Тот факт, что GamePanel отображается вообще, подтверждает, что это правильно называется.
Вы на самом деле называете 'startGame'? Для лучшей помощи скорее опубликуйте [SSCCE] (http://sscce.org/) – Reimeus
@Reimeus да, см. Править. Кроме того, я попытался создать SSCCE, но не смог воспроизвести поведение. – drewmoore
Кажется, что у вас нет компонентов внутри defBoardPanel, и вы не задали ему определенный размер. Возможно, defBoardPanel имеет нулевой размер, поэтому вы его не видите. Попробуйте установить размер панели, а затем вызовите пакет() на свой объект JFrame, чтобы переместить все, основываясь на размерах панелей и компонентов. – Bobulous