JAVA GUI закрывающая рамка и открывающая точно такую ​​же (сброс) - PullRequest
0 голосов
/ 13 марта 2019

Я работаю над простой игрой на Java с графическим интерфейсом (пожалуйста, проверьте приложение). Я создал 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 голосов
/ 13 марта 2019

Вам необходимо dispose() текущий JFrame перед вызовом new MainFrame().Измените ActionListener вашей кнопки buttonPlayAgame на следующее:

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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...