Укажите на ошибку с переключением окон - Java
Формулировка задачи:
Писал программу, все работало. Нечаянно испортил код, так как нашел его где-то в учебных просторах инета и сам не понимаю - восстановить не мог, нашел вроде снова. Итак, код, вроде как, работает без ошибок и предупреждений, окошко первое закрывается - второе открывается вместо него. А вот назад вернуться, как было ранее - уже не выходит. Приложение сразу молча успешно закрывается. Что не так? И вообще что этот код делает, я никак не могу врубиться в его логику?! (-_- не знаю уж как на том месте в коде жирный сделать.. выделил буквами В..
А вот второй фрейм. Второе окошко, где кнопка "Назад" находится:
выделен жирным непонятный мне код
)public class Start extends JFrame
{
private static final long serialVersionUID = 1L;
public static void main(String[] args)
{
JFrame firstFrame = new JFrame();
firstFrame.setName("Окно один");
firstFrame.setLocation(200, 350);
firstFrame.setSize(600, 400);
firstFrame.setBackground(Color.WHITE);
firstFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
firstFrame.setVisible(true);
JPanel buttonPanelOne = new JPanel();
buttonPanelOne.setLocation(10, 10);
buttonPanelOne.setSize(500, 300);
buttonPanelOne.setVisible(true);
JButton nextButton = new JButton("Далее");
nextButton.setLocation(40, 60);
nextButton.setSize(50, 150);
nextButton.addActionListener(new ActionListener()
{
public void actionPerformed(final ActionEvent e)
{
new Second();
[B]Container frame = nextButton.getParent();
do frame = frame.getParent();
while (!(frame instanceof JFrame));
((JFrame) frame).dispose();[/B]
}
});
buttonPanelOne.add(nextButton);
firstFrame.add(buttonPanelOne);
}
}public class Second extends JFrame
{
private static final long serialVersionUID = 1L;
public Second()
{
JFrame WindowTwo = new JFrame();
WindowTwo.setName("Окно два");
WindowTwo.setLocation(200, 300);
WindowTwo.setSize(400, 300);
WindowTwo.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
WindowTwo.setVisible(true);
JPanel panelButtonTwo = new JPanel();
panelButtonTwo.setSize(350, 250);
panelButtonTwo.setBorder(new BevelBorder(3, Color.blue, Color.orange));
panelButtonTwo.setVisible(true);
JButton backButton = new JButton("Назад");
backButton.setLocation(10, 10);
backButton.setSize(50, 150);
backButton.addActionListener(new ActionListener()
{
public void actionPerformed(final ActionEvent e)
{
WindowTwo.dispose();
}
});
panelButtonTwo.add(backButton);
WindowTwo.add(panelButtonTwo);
}
}Решение задачи: «Укажите на ошибку с переключением окон»
textual
Листинг программы
final JButton show = new JButton("Об авторах");
show.addActionListener(e -> {
final JFrame frame = FrameManager.getFrame("About"); // нужно отдельно создать фрейм, а потом регать его в registerDefaultFrames()
frame.setVisible(true);
FrameManager.getFrame("MainMenu").setVisible(false); // если надо скрывать главное окно перед показом нового
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
FrameManager.getFrame("MainMenu").setVisible(true); // после закрытия или скрытия фрейма мы уходим обратно в главное меню(если это окно мы раньше скрывали, канешн)
}
});
});
getContentPane().add(show);