我正在使用Java和Swing编写扫雷程序,并且正在研究当用户使用所需尺寸重新启动游戏时代码应该执行的操作。我有一个MyGrid类,它有一个(int,int)构造函数,是JPanel的扩展。它绘制网格并处理它发生的事情(点击,炸弹放置等)。所以在游戏类中我有一个ActionLister,当用户想要开始一个新游戏时,我验证了用户的输入,然后我想在我的JFrame(这里称为myPane)上绘制一个新的网格。所以我这样做:
myPane.remove(mswGrid);
MyGrid mswGrid = new MyGrid(nowaSzerokosc, nowaWysokosc);
myPane.getContentPane().add(mswGrid, BorderLayout.CENTER);
myPane.repaint();
myPane.validate();
虽然它第一次画得很好,但每隔一段时间它就会在我之前的网格上或之下画出来,这样当我们有3x3然后是15x15时,你必须调整窗口的大小才能看到那些细胞并且它们被涂在以前的3x3网格。为什么网格不会消失?我的意思是 - 当我们创建新对象时,对象已经很久了,因此应该是remove()的图形表示。为什么不呢?
答案 0 :(得分:5)
按此顺序致电。
myPane.revalidate();
myPane.repaint();