我不知道爲什麼它不會顯示。首先,我創建組件的一個實例,然後將其添加到二維JPanel數組中的某個元素中。然後我遍歷該數組並將每個JPanel添加到另一個JPanel容器,該容器將容納所有JPanel。如何使我的自定義Swing組件可見?
然後我將最後一個容器添加到我的JFrame窗口並將可見性設置爲true,它應該可見?
public class View extends JFrame {
Board gameBoard;
JFrame gameWindow = new JFrame("Chess");
JPanel gamePanel = new JPanel();
JPanel[][] squarePanel = new JPanel[8][8];
JMenuBar gameMenu = new JMenuBar();
JButton restartGame = new JButton("Restart");
JButton pauseGame = new JButton("Pause");
JButton log = new JButton("Log");
View(Board board){
gameWindow.setDefaultCloseOperation(EXIT_ON_CLOSE);
gameWindow.setSize(400, 420);
gameWindow.getContentPane().add(gamePanel, BorderLayout.CENTER);
gameWindow.getContentPane().add(gameMenu, BorderLayout.NORTH);
gameMenu.add(restartGame);
gameMenu.add(pauseGame);
gameMenu.add(log);
gameBoard = board;
drawBoard(gameBoard);
gameWindow.setResizable(false);
gameWindow.setVisible(true);
}
public void drawBoard(Board board){
for(int row = 0; row < 8; row++){
for(int col = 0; col < 8; col++){
Box box = new Box(board.getSquare(col, row).getColour(), col, row);
squarePanel[col][row] = new JPanel();
squarePanel[col][row].add(box);
}
}
for(JPanel[] col : squarePanel){
for(JPanel square : col){
gamePanel.add(square);
}
}
}
}
@SuppressWarnings("serial")
class Box extends JComponent{
Color boxColour;
int col, row;
public Box(Color boxColour, int col, int row){
this.boxColour = boxColour;
this.col = col;
this.row = row;
repaint();
}
protected void paintComponent(Graphics drawBox){
drawBox.setColor(boxColour);
drawBox.drawRect(50*col, 50*row, 50, 50);
drawBox.fillRect(50*col, 50*row, 50, 50);
}
}
最後一個問題。注意每個Box組件都有一個位置,當將組件添加到JPanel並將JPanel添加到我的JFrame時,位置會發生什麼變化? 它與其他Box組件有相同的位置嗎?
哪裏是你的`main`?據我所知,View的構造函數從來沒有被調用過。另外,View類是一個`JFrame`,它永遠不可見。 – 2011-01-12 21:37:10
對,忘記告訴你。構造函數在另一個類Game中調用,其中「board」作爲參數傳遞。 董事會持有一個Square [] []和getSquare方法得到的索引列,行的平方。 getColour方法從square獲取squareColour屬性。該板通過循環遍歷數組來設置構造函數中的squareColour。 – 2011-01-12 21:41:17
gameWindow變得可見? 另外,奇怪的是我的菜單是可見的,按鈕也是。 這只是沒有的盒子。 – 2011-01-12 21:45:13