Форум программистов, компьютерный форум, киберфорум
Java: GUI, Графика
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 13.05.2016
Сообщений: 57
1

Как закрыть один JFrame и открыть новый JFrame?

23.06.2016, 12:24. Просмотров 2153. Ответов 3
Метки нет (Все метки)

привет подскажите как реализовать. есть отдельный класс с выпадающим меню(там три пункта). есть отдельный класс который рисует фрейм, панели, кнопки и тд. есть main который создает объект класса с фреймом. нужно чтобы при нажатии на элементы меню фрейм перерисовывался. пробовал реализовать так - три конструктора в классе с фреймом - один который по умолчанию запускается и при выборе первого пункта меню и два других которые только при выборе меню создаются. но проблема в том что при нажатии на пункт меню просто создаются новые фреймы с новыми компонентами а старый фрейм не закрывается. подскажите как при нажатии закрыть старый и открыть новый?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.06.2016, 12:24
Ответы с готовыми решениями:

Как закрыть первый JFrame и открыть другой?
Есть меню(интерфейс пользователя) и графическая заставка, они находятся в разных пакетах как...

Проходил ли кто-то видео-курс techpro? Как у них получилось JFrame в JFrame добавить
Проходил ли кто-то видео-курс techpro? Как у них получилось JFrame в JFrame добавить? ...

Как сделать Jframe внутри другого JFrame
Доброго времени суток джентльмены и леди. Как сделать так, что бы внутри главного JFrame запустить...

Как закрыть jFrame автоматически
Добрый день. Есть форма, в ней кнопкой вызывается подчиненная форма. Как сделать так чтобы...

3
64 / 62 / 37
Регистрация: 13.04.2014
Сообщений: 291
23.06.2016, 17:45 2
Java
1
2
frame.setVisible(false);
frame.dispose();
1
0 / 0 / 0
Регистрация: 13.05.2016
Сообщений: 57
23.06.2016, 20:11  [ТС] 3
получилось вот так. но панель не перерисовывает. надо чтобы при выборе пунктов меню Новичок и тд перерисовывал панель.
Java
1
2
3
4
5
6
7
8
9
10
public class MainMinesWeeper {
 
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MainFrame();
            }
        });
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import javax.swing.*;
import java.awt.*;
 
public class MainFrame extends JFrame {
    private int frameWidth, frameHeight, blocksInRow, blocksInColumn;
    private JButton[][] blocks;
    private JPanel panelBombs = new JPanel();
 
    public MainFrame() {
        super("Сапер");
        setMainPanel(1);
        Menu mainMenu = new Menu();
        setJMenuBar(mainMenu);
    }
 
    public MainFrame(int level) {
        super("Сапер");
        setMainPanel(level);
        Menu mainMenu = new Menu();
        setJMenuBar(mainMenu);
    }
 
    public void setMainPanel(int level) {
        if (level == 1) {
            frameWidth = 200;
            frameHeight = 300;
            blocksInRow = 10;
            blocksInColumn = 10;
        } else if (level == 2) {
            frameWidth = 320;
            frameHeight = 416;
            blocksInRow = 16;
            blocksInColumn = 16;
        } else if (level == 3) {
            frameWidth = 400;
            frameHeight = 520;
            blocksInRow = 20;
            blocksInColumn = 20;
        }
 
        getContentPane().removeAll();
        panelBombs.removeAll();
 
 
        setSize(frameWidth, frameHeight);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setDefaultLookAndFeelDecorated(true);
        setVisible(true);
        setLocationRelativeTo(null);
        setResizable(false);
 
        blocks = new JButton[blocksInRow][blocksInColumn];
 
        panelBombs.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10), BorderFactory.createLoweredBevelBorder()));
        panelBombs.setPreferredSize(new Dimension(frameWidth, frameHeight));
        panelBombs.setLayout(new GridLayout(blocksInRow, blocksInColumn));
 
        for (int i = 0; i < blocksInRow; i++) {
            for (int j = 0; j < blocksInColumn; j++) {
                blocks[i][j] = new JButton("");
                panelBombs.add(blocks[i][j]);
 
            }
        }
 
        panelBombs.revalidate();
        panelBombs.repaint();
 
        getContentPane().repaint();
 
        setLayout(new BorderLayout());
        add(panelBombs, BorderLayout.CENTER);
        //pack();
 
    }
 
    public void removeAllElements(int i) {
 
        panelBombs.removeAll();
        setMainPanel(i);
        panelBombs.revalidate();
        panelBombs.repaint();
 
        repaint();
        revalidate();
        pack();
        setLocationRelativeTo(null);
    }
 
 
    public void removeElements() {
        panelBombs.removeAll();
        panelBombs.revalidate();
        panelBombs.repaint();
 
    }
 
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Menu extends JMenuBar {
 
    private static final String BEGINNER = "Новичoк";
    private static final String AMATEUR = "Любитель";
    private static final String PROFESSIONAL = "Профессионал";
    MainFrame mFr;
 
    public Menu() {
 
        JMenu gameMenu = new JMenu("Игра");
        add(gameMenu);
 
        JMenuItem newGame = new JMenuItem("Новая Игра");
        gameMenu.add(newGame);
        newGame.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //рестарт
            }
        });
 
        gameMenu.addSeparator();
 
 
        JMenuItem beginner = new JMenuItem(BEGINNER);
        gameMenu.add(beginner);
 
        beginner.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
 
                //mFr.removeElements();
                mFr.setMainPanel(1);
                //new MainFrame(1);
            }
        });
 
        JMenuItem amateur = new JMenuItem(AMATEUR);
        gameMenu.add(amateur);
 
        amateur.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //mFr.removeElements();
                mFr.setMainPanel(2);
                //new MainFrame(2);
            }
        });
 
        JMenuItem professional = new JMenuItem(PROFESSIONAL);
        gameMenu.add(professional);
 
        professional.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
 
                mFr.removeAllElements(3);
                //mFr.removeElements();
                //mFr.setMainPanel(3);
                //new MainFrame(3);
            }
        });
        gameMenu.addSeparator();
 
        JMenuItem exitGame = new JMenuItem("Выход");
        gameMenu.add(exitGame);
 
        exitGame.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
 
                System.exit(0);
            }
        });
 
 
        JMenu infoMenu = new JMenu("Справка");
        add(infoMenu);
 
        JMenuItem infoButton = new JMenuItem("Об Игре");
        infoMenu.add(infoButton);
        infoMenu.addSeparator();
        JMenuItem infoButton5 = new JMenuItem("Об Игре5");
        infoMenu.add(infoButton5);
 
 
        JMenu infoMenu2 = new JMenu("Справка2");
        add(infoMenu2);
 
        JMenuItem infoButton7 = new JMenuItem("Об Игре7");
        infoMenu2.add(infoButton7);
        infoMenu2.addSeparator();
        JMenuItem infoButton2 = new JMenuItem("Об Игре2");
        infoMenu2.add(infoButton2);
 
 
    }
}
0
132 / 126 / 85
Регистрация: 13.09.2013
Сообщений: 485
24.06.2016, 13:31 4
Вы не пробовали читать лог ошибок? В частности, там говорится, что у не инициализирован компонент.
А если конкретнее:
вы объявляете в классе Menu поле MainFrame mFr, но не только не инициализируете его, но и не связываете с тем фреймом, что у вас уже был создан. Поэтому меню и не в курсе, что же вы там хотите обновить-то
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2016, 13:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как с BufferedImage открыть рисунок и отобразить на JFrame
прочитать рисунок могу, а отобразить на JFrame или на панели не получается, JLabel не подходит.

Закрыть окно в JFrame
Есть кнопка settings при нажатии на которую выходит окно с настройками, как реализовать то что бы...

Закрыть коннект с MySQL при закрытии окна Swing JFrame
Добрый день, уважаемые коллеги :senor: Подскажите, пожалуйста, как можно закрыть соединение с БД...

JFrame: не могу открыть классы
Для изменения апплета на оконное приложение, я поменял JApplet на JFrame. Появились два(!) класса,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.