JAVA GUI关闭框架和打开框架完全相同(重置)

时间:2019-03-13 13:58:50

标签: java user-interface

我正在开发一个简单的Java GUI游戏(请检查附件)Ive创建了4个类,3个类创建了3个不同的面板(红色,绿色和黄色),第4个类将它们组合为一个框架。 现在,我需要在按下“玩游戏”按钮后进行重置,重新打开整个框架,为玩家进行新的会话。 目前,我设法创建了一个新的MainFrame框架,但是旧框架仍然存在,是否有机会在不完全更改我的GUI代码结构的情况下对其进行修复?香港专业教育学院尝试过不同的方法,但由于我缺乏经验,他们都没有工作。

GUI的屏幕截图: https://photos.app.goo.gl/FbpZUpGX125j7R3c9

主框架代码:

public class MainFrame extends JFrame{

private JFrame frame = new JFrame("No name at the moment");

public MainFrame(){
    frame.setSize(840, 220);
    frame.setLayout (new GridLayout());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    makeFrame();
}
public void makeFrame(){
    frame.add(new PanelA());
    frame.add(new PanelB());
    frame.add(new PanelC());
}

还有带有按钮侦听器的PanelB类:

public PanelB()
{
    setLayout (new GridLayout());
    setBackground(Color.GREEN);
    setVisible(true);
    makePanelB();

}

public void makePanelB()
{
    JButton buttonPlayAgame = new JButton("Play a game");
    buttonPlayAgame.addActionListener(source -> new MainFrame() );

    JButton buttonExit = new JButton("Exit"); 
    buttonExit.addActionListener(source -> System.exit(0));

    add(panelB);
    panelB.add(buttonPlayAgame);
    panelB.add(buttonExit);
    panelB.add(outputMessage, new FlowLayout());
    panelB.setBackground(Color.GREEN);
}

1 个答案:

答案 0 :(得分:0)

在调用dispose()之前,您需要new MainFrame()当前的JFrame。 将buttonPlayAgame按钮的ActionListener更改为以下内容:

buttonPlayAgame.addActionListener(source ->  {
    JFrame currentFrame = (JFrame) SwingUtilities.getWindowAncestor(panelB); // Get the reference of the current frame (which contains panelB component)
    currentFrame.dispose(); // Dispose the current frame
    new MainFrame(); // Create new frame
});