如何关闭扩展JPanel的类

时间:2016-02-09 20:37:13

标签: java swing

我在java上比较新,我正在制作一个HangMan游戏,但我现在正面临着一个问题。特别是,我想关闭程序的框架,当有人找到这个单词时打开一个新程序但是因为我的class那里扩展JPanel dispose()不是一个可用的解决方案。那么,我应该怎么做才能关闭这个框架? (请记住,它的对象是在另一个类中定义的,即调用那个特定的类。)这是我的代码的一部分:(请原谅我显示这么多行)我只是想知道如何关闭这个窗口没有退出整个程序,谢谢你的时间 :))

编辑:谢谢大家,我通过这个评论部分真的学到了很多东西。我很感谢您的快速回应,我希望将来我不会再问这样一个愚蠢的问题:) PS:我实际上使用CardLayout来解决我的问题。我真的没有想到这个问题是如何与''如何以编程方式关闭JFrame'相似的,因为在这个问题中我无法使用dispose方法,因为我正在扩展JPanel。

 import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//import java.io.File;
import java.util.*;
import java.util.concurrent.TimeUnit;
public class Game extends JPanel implements Runnable{

public void paintComponent(Graphics g)
{
 super.paintComponent(g);
 this.setBackGround(Color.BLACK);

}


public void run()
{
}
 }

4 个答案:

答案 0 :(得分:2)

  

我想关闭程序的框架,以便在有人找到单词

时打开一个新框架

简单的答案是,不要。相反,将游戏状态重置为初始状态并按顺序更新UI

答案 1 :(得分:0)

对于你的问题:

此外,使用带有键盘监听器或“提交”按钮的文本字段可以使这更容易 - 您不需要26个字母按钮,UI将更加直观。

此外,使用数组会使许多其他变量消失。

答案 2 :(得分:0)

也许将整个Game类包装在可以控制新JFrame创建的父类中,还可以添加Game JPanel吗?

这会在逻辑上将组件分开,因为当组件类 - 要添加到容器中 - 被扩展然后继续创建自己的容器时可能会造成混淆(如果UI设置完成,这实际上很好一次,但可能不适用于可重复的过程。)

答案 3 :(得分:0)

单独JPanel无法看到,您需要将它放在某种容器中。此容器由panel.getParent()接收。

有了这个,您可以从父容器中删除自己。

此示例类具有JButton,可在单击时从视图层次结构中删除该面板。

public static class APanel extends JPanel {
    public APanel() {
        super();

        JButton btn = new JButton();
        btn.setText("Hello World!");
        btn.addActionListener(e -> {
            ((JButton) e.getSource()).setText("Boo!");
            final Container parent = APanel.this.getParent();
            parent.remove(APanel.this);
            parent.repaint();
        });
        add(btn);
    }
}