(数時間後に 2 番目の質問)
ケイ、私は Java でチェスのバリエーションを作成しています。コンソール プログラムを希望どおりに動作させていますが、コンソールをそのまま維持しながら、スイング GUI に変換しようとしています。これまでのところ、コンソール用にピースが入った正方形の配列と、GUI 用にピースが入った JPanel の 2 次元配列があります。私はまだ GUI に可動部分を実装していないので、まだコンソールから実行していますが、実際の GUI は部分を移動した後に更新されません...コンソールではそうですが (これがあれば申し訳ありません)紛らわしいです)。
GUI は、いくつかのメソッド drawBoard() および drawSidebar() を呼び出し、サイズ、タイトルなどを設定するコンストラクターで構成されています...メイン メソッドは次のようになります。
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 メソッドがまったく呼び出されていないようです:(