我正在开发一个简单的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);
}
答案 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
});