(几个小时后的第二个问题)
凯,所以我在 java 中制作国际象棋变体,我的控制台程序按我想要的方式工作,但现在我试图将它转换为摇摆 GUI,同时仍然保持控制台的东西完好无损。所以到目前为止,我有一个正方形数组,其中包含用于控制台的碎片,还有一个二维数组 JPanel,其中包含用于 GUI 的碎片。我还没有在 GUI 中实现移动部件,所以我仍然从控制台执行它,但是在我移动部件后实际的 GUI 没有更新......即使它在控制台上执行(对不起,如果这个令人困惑)。
GUI 由一个构造函数组成,该构造函数调用一些方法 drawBoard() 和 drawSidebar() 并设置大小、标题等……所以这就是 main 方法的样子:
public static void main(String args[]) {
ChessGUI GUI = new ChessGUI();
Board console = new Board();
do {
console.printBoard();
console.getScore();
console.getMove();
GUI.boardPanel.revalidate();
GUI.sidePanel.revalidate();
GUI.repaint();
} while (true);
}
和 drawBoard() 以防它有所不同:
public void drawBoard() {
LayoutManager layout = new GridLayout(NUMBER_OF_ROWS, NUMBER_OF_COLS);
boardPanel.setLayout(layout);
boardPanel.setPreferredSize(new Dimension(200, 450));
chessBoard = new JPanel[NUMBER_OF_ROWS][NUMBER_OF_COLS];
for (int i = 0; i < NUMBER_OF_ROWS; i++) {
for (int j = 0; j < NUMBER_OF_COLS; j++) {
chessBoard[i][j] = new JPanel();
chessBoard[i][j].setBackground(getColor(i,j));
int index = i * 4 + j;
if (!(boardArray.chessBoard[index].square.isEmpty())) {
Piece piece = (Piece) boardArray.chessBoard[index].square.firstElement();
chessBoard[i][j].add(new JLabel(piece.toString()));
}
boardPanel.add(chessBoard[i][j]);
}
}
}
repaint 和 revalidate 方法似乎根本没有调用,即使控制台正在更新:(