我在這裏傻眼了。我有我添加到父JPanel
(的GamePanel)如下一個JPanel
(defBoardPanel):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(大型機),其如下所示。當應用程序啓動時,JFrame會顯示一種不同類型的面板(SetupBoard),用戶通過它設置他們的遊戲板。當他們點擊「接受」時,調用MainFrame的StartGame()方法,它應該顯示上面的JPanel。
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實例的大型機參考。 GamePanel顯示的事實證明這是被正確調用的。
你真的調用'startGame'嗎?爲了更好地幫助發佈[SSCCE](http://sscce.org/) – Reimeus
@Reimeus是的,請參閱編輯。此外,我試圖創建一個SSCCE,但我無法複製該行爲。 – drewmoore
您似乎沒有在defBoardPanel中放置任何組件,也沒有給它一個特定的大小。 defBoardPanel可能有零大小,所以你沒有看到它。嘗試設置面板的大小,然後調用JFrame對象上的pack(),以根據面板和組件大小重新定位所有內容。 – Bobulous