2

我正在使用 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(),图形表示也应该如此。为什么不是?

4

1 回答 1

5

按此顺序调用。

    myPane.revalidate();
    myPane.repaint();
于 2013-01-11T11:44:25.117 回答