在开始之前先介绍一下背景,我正在做的是制作一个国际象棋游戏,除了游戏的分数之外,我所有的东西都按照我想要的方式工作。我在一个名为 Board
的类中有一个方法,并且在该类中我有一个名为 updateScore()
的方法。
private void updateScore(){
int whitePawn = 0; int blackPawn = 0;
int whiteKnight = 0; int blackKnight = 0;
int whiteBishop = 0; int blackBishop = 0;
int whiteCastle = 0; int blackCastle = 0;
int whiteQueen = 0; int blackQueen = 0;
int whiteKing = 0; int blackKing = 0;
for(int k = 0; k < 8; k++){ //Checks through the board to see what pieces are on it.
for(int l = 0; l < 8; l++){
if(gameBoard[k][l] == 11){
whitePawn++; //increments the vales how many of a certain pieces are on the board.
}
if(gameBoard[k][l] == 12){
whiteCastle++;
}
if(gameBoard[k][l] == 13){
whiteKnight++;
}
if(gameBoard[k][l] == 14){
whiteBishop++;
}
if(gameBoard[k][l] == 15){
whiteQueen++;
}
if(gameBoard[k][l] == 16){
whiteKing++;
}
if(gameBoard[k][l] == 21){
blackPawn++;
}
if(gameBoard[k][l] == 22){
blackCastle++;
}
if(gameBoard[k][l] == 23){
blackKnight++;
}
if(gameBoard[k][l] == 24){
blackBishop++;
}
if(gameBoard[k][l] == 25){
blackQueen++;
}
if(gameBoard[k][l] == 26){
blackKing++;
}
}
}
if(whiteKing == 0){ //No white king? Checkmate.
checkMate(1);
}
else if(blackKing == 0){ //No black king? Checkmate.
checkMate(2);
}
score = new Scores();
score.showScores(whitePawn, blackPawn);
}
我还有另一个名为 Scores
的类,它初始化另一个 JFrame 以显示游戏得分,如下所示:
分数类如下:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class Scores extends JFrame{
private int width = 300;
private int height = 400;
int whitePawn = 0;
int blackPawn = 0;
public Scores(){
int a = this.getWidth();
setSize(width, height);
setTitle("Chess - Scores");
setIconImage(new ImageIcon("imgs/chess-icon.png").getImage());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setLocation(a+25,50);
JPanel p = new JPanel();
getContentPane().add(p);
this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.X_AXIS));
Box horizontalBox;
//showScores(whitePawn, blackPawn);
}
public void paintComponent(Graphics g){
super.paintComponents(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.WHITE);
}
public void showScores(int wp, int bp){
whitePawn = wp;
blackPawn = bp;
JLabel white_pawn = new JLabel("White Pawn: "+wp+" ", JLabel.CENTER);
JLabel black_pawn = new JLabel("White Pawn: "+bp+" ", JLabel.CENTER);
add(white_pawn, Box.createHorizontalGlue());
add(Box.createRigidArea(new Dimension(9, 0)));
add(black_pawn, Box.createHorizontalGlue());
add(Box.createRigidArea(new Dimension(9, 0)));
revalidate();
repaint();
}
}
但是出现的问题是,调用该方法时窗口永远不会更新?谁能提供解决方案吗?
最佳答案
您确实意识到 JFrame
没有 paintComponent
方法,对吗?所以你没有凌驾于任何事情之上。如果您想使用 paintComponent
JPanel
此外,这是否可能是范围问题?是否有任何其他组件依赖于 whitePawn、whiteKing 等
变量?因为它们都是本地范围的。无论调用该方法多少次,变量始终从 0 开始
关于Java - JFrame 在调用时不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20707760/