powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Swing, почему диалог создаётся только после фрейма?
7 сообщений из 7, страница 1 из 1
Swing, почему диалог создаётся только после фрейма?
    #34202605
wolf_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема: элементы диалога (JLabel-ы), прорисовываются только после создания фрейма!
Вопрос: почему так происходит и как это исправить?
Имеет место приблизительно такой код (просто он разнесен на несколько функций и файлов поэтому только концепт представлен):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
//---------
    //Создаем диалог ожидания
    start("Загружается главное окно программы");
    JFrame win =  new  MainProgramm();
    win.setVisible(true);
    stop();
//---------
      public   void  start(String title){
          dialog= new  JDialog(title);
          //создаём JLabel и грузим туда гиф
          dialog.setVisible(true);      
    }
     public  stop(){
          dialog.setVisible(false);
    }
...
Рейтинг: 0 / 0
Swing, почему диалог создаётся только после фрейма?
    #34202940
MBasil
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Диалоговое окно, как я понимаю, не является самостоятельным,
у него есть родитель - базовый Frame.
Ну и пусть себе, ведь диалоговое, модальное окно для выдачи
сообщений, а не для выполнения основной работы.
Может и не стоит исправлять? У Моргана (старая книга Java2)
я позаимствовал идею работы диалога в виде синглтон'а.
Очень удобно.
...
Рейтинг: 0 / 0
Swing, почему диалог создаётся только после фрейма?
    #34203092
wolf_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда в конструкторе frame=null, то диалоговое окно само создает его.
Но соль не в этом, пусть я сам создам фрейм, при создании 2ого фрейма, в коде MainProgramm(), будет все тоже самое. Основная работа лежит на Mainprogramm, он может долго загружаться и надо диалог ожидания выводить.

диалог этот ожидания нужен не только там, пробовал внутри самого фрейма при выполнении "длительного" Action-a, та же батва. Свинг только создаёт диалог без всех внутренних компонентов, сами внутренние компоненты создаются по завершении выполнения Action-a

Может тут дело в очереди свинг-а?
Как обойти это, или если можно то другой пример диалога ожидания...
...
Рейтинг: 0 / 0
Swing, почему диалог создаётся только после фрейма?
    #34203500
wolf_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал использовать AWT фрейм (вместо диалога), JLabel не добавлялся ка и раньше, поставил просто Label - прекрастно добавился, но в нём нельзя поставить иконку. Перегрузил метод paint(), картинка грузиться только после фрейма... т.о. всё дело в гиф-е.
Отсюда вопросы:
1. Загружал gif ImageIcon-ом, гиф анимированный, есть ли замена свинговскому, какая?
2. Может можно что-то подправить в самом свинге?
...
Рейтинг: 0 / 0
Swing, почему диалог создаётся только после фрейма?
    #34203934
leafox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Потому что диалог не успел прорисоваться. Нужно его открывать в другом потоке. Или дать ему прорисоваться, а через некоторое время, напр. полсекунды, открыть главный фрейм.
Вот два способа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
    //Создаем диалог ожидания
    Runnable r =  new  Runnable()
{
     public   void  run()
   {
       start("Загружается главное окно программы");
   } 
};
   
SwingUtilities.invokeLater( r );

 
    JFrame win =  new  MainProgramm();
    win.setVisible(true);
    stop();
//---------
      public   void  start(String title){
          dialog= new  JDialog(title);
          //создаём JLabel и грузим туда гиф
          dialog.setVisible(true);      
    }
     public  stop(){
          dialog.setVisible(false);
    }

Можно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Timer timer =  new  Timer(  500 ,  new  TimerListener() );
start("Загружается главное окно программы");
timer.start();

 class  TimerListener
 implements  ActionListener
{ 
      public   void  actionPerformed( ActionEvent e )
     {
       timer.stop();
       JFrame win =  new  MainProgramm();
       stop();
       win.setVisible(true);
     }
}
...
Рейтинг: 0 / 0
Swing, почему диалог создаётся только после фрейма?
    #34204101
wolf_roma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первый способ не помог: и фрейм и диалог появлялись одновременно (обычно фрейм секунды на 3 позже открывается чем диалог)...
Второй способ: я такое уже пробовал, dialog.setVisible(true) в отдельном потоке, а задержку ставил -Thread.sleep(10000)


Придется переходить на псевдографику и авт
...
Рейтинг: 0 / 0
Swing, почему диалог создаётся только после фрейма?
    #34204138
leafox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
Первый способ не помог: и фрейм и диалог появлялись одновременно (обычно фрейм секунды на 3 позже открывается чем диалог)...
Второй способ: я такое уже пробовал, dialog.setVisible(true) в отдельном потоке, а задержку ставил -Thread.sleep(10000)

В первом случае после invokeLater поставь Thread.sleep(1000); А второй способ попробуй именно через таймер, он работает стабильно.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Swing, почему диалог создаётся только после фрейма?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]