私はここで唖然とします。次のようJPanel
に、親JPanel
(GamePanel) に追加する (defBoardPanel) があります。
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 は別のタイプのパネル (SetupBoard) を表示し、ユーザーはそれを使用してゲーム ボードをセットアップします。「同意する」をクリックすると、MainFrame の StartGame() メソッドが呼び出され、上の 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);
}
ここで、mf は、SetupBoard インスタンスを作成した MainFrame への参照です。GamePanel がまったく表示されるという事実は、これが正しく呼び出されていることを確認します。