Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel没有';使用remove()后不会消失_Java_Swing - Fatal编程技术网

Java JPanel没有';使用remove()后不会消失

Java JPanel没有';使用remove()后不会消失,java,swing,Java,Swing,我正在用Java和Swing编程“扫雷者”,并且正在研究当用户以期望的维度重新启动游戏时,代码应该做什么。我有一个类MyGrid,它有一个(int,int)构造函数,是JPanel的扩展。它绘制网格并处理网格发生的情况(单击、炸弹放置等)。所以在游戏类中,我有一个ActionLister,当用户想要开始一个新游戏时,我验证用户的输入,然后我想在我的JFrame(这里称为myPane)上绘制一个新的网格。所以我做了这样的事情: myPane.remove(mswGrid);

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

按这个顺序打电话

    myPane.revalidate();
    myPane.repaint();

不幸的是,它没有帮助-它仍然无法通过3x3->15x15测试,但症状相同。@Straightfw不,这是正确的建议,问题必须在您这边的某个地方,正确的概念是使用CardLayout with pack()作为容器,然后您只需在两者之间切换views@mKorbel-我不是说没有,只是它不起作用“照原样”。我想我必须修改整个代码,因为罪魁祸首在别处。好的,发现了它。我对MyGrid对象的整个编码都很差,所以我只是将它从一个继承自JPanel的对象重构为一个“常规”对象对象,该对象在其主体中创建JPanel,并允许您通过简单的getter获取该面板。现在就像一个符咒:)考虑改用
CardLayout
()。为了更快地获得更好的帮助,请发布一个@GuillaumePolet-一个JFrame对象,其中包含菜单和播放网格。