2013-12-20 18 views
0

在我开始之前有一点背景,我正在做的是一个国际象棋游戏,我有一切工作的方式,我想除了游戏的得分。我在一个名为Board的类中有一个方法,在这个类中我有一个名为updateScore()的方法。Java - JFrame在被调用时没有更新

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的展示游戏分数,像这样:

Game board ans score window

这里是得分类,如下所示:

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(); 
    } 

} 

但是发生的问题是,调用该方法时窗口永远不会更新?谁能提供解决方案?

+0

您能否提供一个[SSCCE](http://sscce.org) –

+0

getContentPane()方法在哪里? – asaini007

+0

在我的分数类构造函数 – Zy0n

回答

0

在你Scores.showScores方法使用

getContentPane().add() 

insted的只是调用add

1
super.paintComponent's'(g); 

看起来你有一个错字。摆脱paintComponent()中的“s”。

2

你知道JFrame没有paintComponent方法吗?所以你没有压倒一切。应该使用JPanel如果你想使用paintComponent

此外,是否有可能这是一个范围问题?其他任何组件是否依赖于whitePawn, whiteKing, etc变量?因为它们都是本地范围的。无论您调用方法的次数是多少,变量总是从0开始

+0

不,我没有意识到,谢谢。 – Zy0n

+0

+1错过了明显的... – camickr

+0

嗯,我没有想到这一点。在我的董事会类的updateScore()方法在任何情况下公开 – Zy0n