小弟昨天写的一个扫雷,基本都可以运行,但是在开始新游戏选择的时候,将原来的japenl remove掉,创建一个新的japnel实例以后,再添加,如果是和原来的相同的,程序就不会调用paintcomponent方法。。不知道为啥。。代码如下class GameFrame extends JFrame {

private Container contentPane;
private GameControlPanel gameControlPanel;
private InfoPanel infoPanel;
private MineGame mineGame;

private JMenuBar gameMenu;
private JMenu fileMenu;
private JMenu optionMenu;
private JMenuItem newGame;
private JMenuItem recordTime;
private JMenuItem apparence;
private JMenuItem exit;
private JMenuItem help;

private int gameBoardWidth, gameBoardHeight;

private NewGameListener newGameListener;



//默认的游戏为9x9方块,其中包含了9个炸弹
public GameFrame() {

//创建自定义的游戏的面板实例
mineGame = new MineGame(9, 9, 9); //默认的为9*9的方块,9个地雷
infoPanel = new InfoPanel(mineGame);
gameControlPanel = new GameControlPanel(mineGame, infoPanel);
contentPane = this.getContentPane();


//创建菜单实例
gameMenu = new JMenuBar();
fileMenu = new JMenu("文件");
optionMenu = new JMenu("选项");
newGame = new JMenuItem("新游戏");
recordTime = new JMenuItem("排行榜");
apparence = new JMenuItem("样式");
exit = new JMenuItem("退出");
help = new JMenuItem("帮助");

//创建监听器实例,并和实例绑定
newGameListener = new NewGameListener(this);
newGame.addActionListener(newGameListener);

//添加菜单
fileMenu.add(newGame);
fileMenu.add(recordTime);
fileMenu.add(apparence);
fileMenu.add(exit);
optionMenu.add(help);
gameMenu.add(fileMenu);
gameMenu.add(optionMenu);
this.setJMenuBar(gameMenu);

//添加设置
this.setLayout(null);
gameBoardWidth = gameControlPanel.getBoardSize()[0];
gameBoardHeight = gameControlPanel.getBoardSize()[1];
gameControlPanel.setBounds(1, 1, gameBoardWidth, gameBoardHeight);
gameControlPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
infoPanel.setBounds(1, gameBoardHeight+1, gameBoardWidth, 27);
infoPanel.setBorder(BorderFactory.createLoweredBevelBorder());

//添加面板
contentPane.add(gameControlPanel);
contentPane.add(infoPanel);

pack();
setTitle("扫雷");
setSize(new Dimension(gameBoardWidth+7, gameBoardHeight+80));
setLocation(400,200);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void newGame(int row, int column, int mineNo) {

this.remove(gameControlPanel);
this.remove(infoPanel);

mineGame = new MineGame(row, column, mineNo);
infoPanel = new InfoPanel(mineGame);
gameControlPanel = new GameControlPanel(mineGame, infoPanel); ////问题就在这里,如果我创建的心游戏不同于原来的,比如说,创建10*10的面板,是可以运行的,但是如果新的创建的和原来的是一样子的比如9*9的,就算我强制调用repaint也没有用。。不知道为什么

gameBoardWidth = gameControlPanel.getBoardSize()[0];
gameBoardHeight = gameControlPanel.getBoardSize()[1];

gameControlPanel.setBounds(1, 1, gameBoardWidth, gameBoardHeight);
gameControlPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
infoPanel.setBounds(1, gameBoardHeight+1, gameBoardWidth, 27);
infoPanel.setBorder(BorderFactory.createLoweredBevelBorder());

contentPane.add(gameControlPanel);
contentPane.add(infoPanel);
this.setSize(new Dimension(gameBoardWidth+7, gameBoardHeight+80));
}


private class NewGameListener implements ActionListener {

private GameFrame gameFrame;

public NewGameListener(GameFrame gameFrame) {
this.gameFrame = gameFrame;
}

public void actionPerformed(ActionEvent e) {
NewGameFrame newGameFrame = new NewGameFrame(gameFrame); //用来创建一个新游戏选择的面板
}

}

}希望高手们帮忙了,菜鸟感激不敬