我在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()
{
}
}
答案 0 :(得分:2)
我想关闭程序的框架,以便在有人找到单词
时打开一个新框架
简单的答案是,不要。相反,将游戏状态重置为初始状态并按顺序更新UI
答案 1 :(得分:0)
对于你的问题:
JFrame
而不是JPanel
。frame
)中创建的JFrame的关闭操作。使用setDefaultCloseOperation
https://docs.oracle.com/javase/7/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation(int) JFrame
存储为实例字段,稍后再调用dispose(无论何时需要重新启动游戏)。此外,使用带有键盘监听器或“提交”按钮的文本字段可以使这更容易 - 您不需要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);
}
}