Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/84: Рейтинг темы: голосов - 84, средняя оценка - 4.79
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88

Frame два окна

25.11.2011, 22:40. Показов 16398. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Вопрос по поводу создания не одного окна при помощи Jframe.

это программа создаёт окно с кнопкой , при нажатии создаёт ещё одно идентичное окно, а при закрытии окно закрываются все. Как сделать чтобы закрывался только конкретное окно, а другие нет.

вот код:

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
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
 
 class MyFrame extends JFrame{
    
    public MyFrame(int a, int b)
    {
        setTitle("окно");                   // название созданного окна
        
        setBounds(a,b,a,b);                          // положение и размер окна
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // обработка события закрытия окна 
        setResizable(false);                             // запрет изменений размеров окна  
        MyPanel pan = new MyPanel();
        add(pan);
        setVisible(true);                                // отобрадение окна
    }   
}
 
 class MyPanel extends JPanel
   {
    public MyPanel()
     {
       JButton  button = new JButton("Создать новое окно");
       add(button);
       button.addActionListener(listener);
     }
       ActionListener listener= new ActionListener()
               {
                   public void actionPerformed(ActionEvent event)
                   {
                       Random rnd = new Random();
                       MyFrame frame = new MyFrame(rnd.nextInt(800), rnd.nextInt(500));
                       
                   }
               };
   }
 
 public class main
{
   public static void main(String[] args)
   {
       MyFrame frame = new MyFrame(100,100);
   }
}
А может с Jframe такое не проделаешь и лучше использовать диалог???
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2011, 22:40
Ответы с готовыми решениями:

Перезагрузка окна (Frame)
Нужна функция для перезагрузки Frame. Желательно без закрытия окна.

Обновление данных на Frame из другого Frame
Помогите реализовать: есть MainFrame и SettingsFrame. Нужно что бы при нажатии Button на SettingsFrame обновилась (перерисовалась) таблица...

Mozilla: одна сессия на два окна
помогите разобраться. приложение веб работает не корректно если пользователь пробует войти одновременно под 2 логинами в приложение с...

12
Добрый самаритянин
 Аватар для John_Pa9JIbHuK
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
25.11.2011, 23:49
Думаю вся проблема в этом:
Java
1
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Добавлено через 2 минуты
И так как вы нигде не ссылаетесь на вновь созданный JFrame вместо
Java
1
MyFrame frame = new MyFrame(rnd.nextInt(800), rnd.nextInt(500));
лучше написать
Java
1
new MyFrame(rnd.nextInt(800), rnd.nextInt(500));
0
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
26.11.2011, 01:42  [ТС]
Цитата Сообщение от John_Pa9JIbHuK Посмотреть сообщение
1 setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE);
так это не зависит вроде как, просто явно указываим сласс static переменной(или чено-то там)

мы сча проверимм)))

Добавлено через 13 минут
ДА ты прав, я не так в начале понял))) имеется как я понял четыри перенные для закрытия , но типо поставить их вместо EXIT_ON_CLOSE не получится , нуна прои нициализировать. может я ошибаюсь.
0
Добрый самаритянин
 Аватар для John_Pa9JIbHuK
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
26.11.2011, 01:50
Цитата Сообщение от /*Alexander*/ Посмотреть сообщение
имеется как я понял четыри перенные для закрытия , но типо поставить их вместо EXIT_ON_CLOSE не получится , нуна прои нициализировать. может я ошибаюсь.
Учись писать грамотнее и понятнее, я понимаю что мысли словами не предать, но все же
Самое первое окно которое создается в main должно быть с setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE), а те что на кнопку без этого.
Для этого в конструкторе передавай еще один параметр(bool), в котором указываешь, нужно ли setDefaultCloseOperation или нет.
Я думаю мысль ясна.

Добавлено через 2 минуты
Java
1
public MyFrame(int a, int b, boolean freeOnClose)
1
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
26.11.2011, 17:59  [ТС]
О спасибо , Всё окей. НО теперь не понятно ,если мы создаём frame без setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE), то он все равно закрывается, зачет тогда его писать. Можно объяснение?

Я как понимаю , мы пишим setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE), для того чтобы смсиемная кнопка закрытия отреогировала .
0
Добрый самаритянин
 Аватар для John_Pa9JIbHuK
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
26.11.2011, 23:35
Без setDefaultCloseOperation(JFrame.EXIT_ON_ CLOSE) при закрытии фрейма приложение не завершится.
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
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
 
 class MyFrame extends JFrame{
    
    public MyFrame(int a, int b, boolean freeOnClose)
    {
        setTitle("окно");                   // название созданного окна
        
        setBounds(a,b,a,b);                          // положение и размер окна
        if (freeOnClose)
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // обработка события закрытия окна 
        setResizable(false);                             // запрет изменений размеров окна  
        MyPanel pan = new MyPanel();
        add(pan);
        setVisible(true);                                // отобрадение окна
    }   
}
 
 class MyPanel extends JPanel
   {
    public MyPanel()
     {
       JButton  button = new JButton("Создать новое окно");
       add(button);
       button.addActionListener(listener);
     }
       ActionListener listener= new ActionListener()
               {
                   public void actionPerformed(ActionEvent event)
                   {
                       Random rnd = new Random();
                       MyFrame frame = new MyFrame(rnd.nextInt(800), rnd.nextInt(500), false);
                       
                   }
               };
   }
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
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
 
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
 
/**
 *
 * @author Dreambit
 */
public class Main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException {
 
 
        MyFrame frame = new MyFrame(100,100, true);
    }
 
}
Добавлено через 1 минуту
В данном случае, приложение завершится тока в случаи завершения первого созданного фрема, того, который создан в main, так как freeOnClose мы поставили в true
1
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
27.11.2011, 01:19  [ТС]
так я и написал, но если запустить её и открыть второе окно, а потом закрыть первое, то второе останется висеть, а это как то неправельно. как сделать так , чтобы при открытии второго окна первое стало недоступно,т.е. нельзя закрыть его и разрешить только после закрытия второго.
0
Добрый самаритянин
 Аватар для John_Pa9JIbHuK
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
27.11.2011, 06:28
/*Alexander*/
Не знаю как у тебя, но при закрытии первого, остальные окна закрываются, по крайней мере у меня.
Цитата Сообщение от /*Alexander*/ Посмотреть сообщение
чтобы при открытии второго окна первое стало недоступно
Используй тогда JDialog, у него есть модальный режим.
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
27.11.2011, 13:44
Если хотите сделать с помощью одного класса два окна, одно из которых EXIT_ON_CLOSE, а второе DISPOSE_ON_CLOSE - не получится.
Делайте еще один класс, наследуйте его от первого, и переопределите метод setDefaultCloseOperation с:
Java
1
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
на:
Java
1
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
1
Добрый самаритянин
 Аватар для John_Pa9JIbHuK
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
27.11.2011, 14:20
Цитата Сообщение от _ViPeR_ Посмотреть сообщение
переопределите метод setDefaultCloseOperation
ну наверное понятие переопределение метода тут неуместно
0
614 / 488 / 175
Регистрация: 02.03.2010
Сообщений: 1,238
27.11.2011, 14:26
согласен, ступил
Правильнее будет "вызвать метод с другим аргументом"
0
5 / 5 / 0
Регистрация: 29.04.2010
Сообщений: 88
27.11.2011, 19:37  [ТС]
Цитата Сообщение от John_Pa9JIbHuK Посмотреть сообщение
Не знаю как у тебя, но при закрытии первого, остальные окна закрываются, по крайней мере у меня.

ДА все норм, это я чета начал изменять код и закомментировал вот это
Java
1
2
if(freeOnClose)
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Цитата Сообщение от _ViPeR_ Посмотреть сообщение
Если хотите сделать с помощью одного класса два окна, одно из которых EXIT_ON_CLOSE, а второе DISPOSE_ON_CLOSE - не получится.
Делайте еще один класс, наследуйте его от первого, и переопределите метод setDefaultCloseOperation с:
А может можно написать так
Java
1
2
3
if(freeOnClose)
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // обработка события закрытия окна 
        else    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
0
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 2
27.04.2016, 02:23
У меня похожая проблема.
У меня к ноутбуку подключен монитор и необходимо чтобы одно окно открылось на одном мониторе, а второе на другом.
Возможно кто то знает как это сделать?
Буду очень благодарен за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.04.2016, 02:23
Помогаю со студенческими работами здесь

Frame
Добрый вечер! Встали несколько вопросов при создание простой формы: public static void main(String args) { Frame f = new...

Не прорисовывается окно. Два окна, при тройном переходе перестают прорисовываться. Консоль ошибок не пишет
Приветствую. Вопрос от новичка. Пробую сделать записную книжку JavaFX. Два окна: первое - главное, второе - для написания заметки. ...

Изменение размера окна Frame'а
Мир Вашему дому знатоки, имею следующую фреймовую структуру <FRAMESET id=outterframe ROWS='30,*' FRAMEBORDER = YES BORDERCOLOR='#5F5F7F'...

Как передать текст из главного окна во Frame
Столкнулся с следующей проблемой: у меня на главной форме установлены Frame, TextBox и кнопка, во Frame подгружена страница, на которой...

Frame не могу передать значение из родительского окна в дочернее (обе страницы на моем домене)
Вот так почему-то не получается: дочерняя страница: <input type="text" id="lol"> Родительская...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru