Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как корректно прибить JInternalFrame ? 
:(
    Опции темы
SATYR
Дата 22.4.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.5.2005

Репутация: нет
Всего: нет



Всем привет .

Народ вопрос следующий, действительно ли при закрытие JInternalFrema-ов методом doDefaultCloseAction при setDefaultCloseOperation установленной в DISPOSE_ON_CLOSE происходит уничтожение объекта? 
С прашиваю об этом в связи с тем что наблюдаю следующую неприятную для себя ситуацию, после закрытия JInternalFrame-ов расположенных на слоённой панели ( все фреймы располагаютя в одном слое) getComponentCountInLayer(int layer) возвращает тоже значение что было  до их закрытия.
Поэтому предполагаю что ссылки на фреймы остались внутри JLayeredPane и фреймы как таковые неуничтожены. 
Незнаю насколко это коректно , но попытался принудительно удалить закрытые  фреймы из панели методом remove(Component), после чего при попытки вызвать  getComponentCountInLayer(int layer)  пррограмма вавыливается в отладчике в EventDipatchThread.

Подскажите как удалить их коректно, ломаю голову уже три дня.
PM MAIL   Вверх
ecologist
Дата 23.4.2009, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: нет
Всего: 9



Обычно фрейм закрывается и уничтожается методом dispose();

А ты как делаешь ?
PM MAIL   Вверх
goodday1941
Дата 23.4.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 709
Регистрация: 16.7.2006
Где: Украина, Киев

Репутация: 8
Всего: 9



Цитата(SATYR @  22.4.2009,  18:44 Найти цитируемый пост)
Народ вопрос следующий, действительно ли при закрытие JInternalFrema-ов методом doDefaultCloseAction при setDefaultCloseOperation установленной в DISPOSE_ON_CLOSE происходит уничтожение объекта? 

теоретически да

и еще вместо doDefaultCloseAction  можно использовать setClosed ...  эффект тот же будет



--------------------
SCJP 6
PM MAIL ICQ Skype GTalk   Вверх
SATYR
Дата 23.4.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.5.2005

Репутация: нет
Всего: нет



Я к сожалению делал иначе через doDefaultCloseAction.  dispose() оказалось то что надо. Спасибо smile
PM MAIL   Вверх
SATYR
Дата 23.4.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.5.2005

Репутация: нет
Всего: нет



Я извиняюсь, но проблема осталась. При вызове любого из методов:  dispose(), doDefaultCloseAction, setClosed(true) картина прежняя  и ещё выяснилось что при вызове dispose() окно закрывается без оработки события InternalFrameEvent что в моем случае не очень хорошо. 
После удаления объекта из JLayeredPane методом remove(Component) если изъявить желание узнать колличество оставшихся окошек посредством getComponentCountInLayer(int layer)  программа вавыливается в отладчике в EventDipatchThread. 

Немного дополню вопрос пояснением процесса закрытия фрейма, может быть это имеет принципиальное влияние на проблему.

Закрытие фрейма происходит по щелчку мыши на его области т.е. в слушателе событий мыши вызывется dispose() // doDefaultCloseAction()// setClosed(true),
далее в слушателе событий фрейма  (InternalFrameEvent) в методе InternalFrameClosing отслеживается  колличество оставшихся окошек посредством getComponentCountInLayer(int layer) как правило после закрытия оно не меняется. smile  если тамже пробуем либо в обработчике мыши пробуем remove то валится в  EventDipatchThread. Вот такие пироги. smile smile

Добавлено через 5 минут и 48 секунд
to goodday1941

В том то и дело что эффекта ненаблюдается
PM MAIL   Вверх
aleksandy
Дата 24.4.2009, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



Код приведи, чего-то ты не так делаешь. smile
PM   Вверх
SATYR
Дата 24.4.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 24.5.2005

Репутация: нет
Всего: нет



Привожу код

Код

package analitic_alert1;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import java.util.Vector;

import javax.swing.JInternalFrame;
import javax.swing.JLayeredPane;
import javax.swing.WindowConstants;

import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;


public class AlertWindow extends JInternalFrame implements InternalFrameListener{
  private JLayeredPane pane;
  private Vector array_windows=null; //Вектор хранит ссылки на уже созданные окна
  private Mouse mouse=new Mouse();
  private Point pp=new Point(); 
  private int pos=0; 
 .....


  public AlertWindow( JLayeredPane pane,Vector array, Point p, Dimension area,int minutes) {
               this.pane=pane;
        
   addInternalFrameListener(this);
   addMouseListener(mouse);

    .....
   pack();        
               
  ....
   //Вычисляем координаты окна
   array_windows=array;
   if(array_windows.toArray().length!=0){
      AlertWindow  alwRef=(AlertWindow)array_windows.lastElement();

      pp=alwRef.getLocation();
      pp.y+=22;
      if((getPreferredSize().getHeight()+pp.y)>area.getHeight()){
         pp.y = p.y;
         pp.x+=64;
         if((getPreferredSize().getWidth()+pp.x)>area.getWidth())pp.x=p.x;
      }
      setLocation(pp);
   }
   else{pp.setLocation(p);}
   setLocation(pp);
   setVisible(true);

   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
   main.frame.pSound.play(); // запускаем звук
   array_windows.add(this);
   pane.add(this, 0);
   try { setSelected(true);}
   catch (PropertyVetoException ex1) {}
  }

 .... 

  public void internalFrameClosed(InternalFrameEvent e) {}
  public void internalFrameClosing(InternalFrameEvent e) {

    int index=array_windows.indexOf(this)-1;
    array_windows.remove(this);
// если тут попробовать ((JLayeredPane)getParent()).remove(this); то вывалится в EventDipatchThread
    int gg=((JLayeredPane)getParent()).getComponentCountInLayer(0);
    if(index!=-1){
       AlertWindow  alwRef=( AlertWindow)array_windows.elementAt(index);
       alwRef.UnLockSelect();
       alwRef.moveToFront();
       try {alwRef.setSelected(true);}
       catch (PropertyVetoException ex1) {}
    }else if(gg==1){
        main.frame.pSound.stop();
    }   
  }
 ....

/*******************************************************************************
* Слушатель мыши
*******************************************************************************/

  class Mouse implements MouseListener {

    public void mouseClicked(MouseEvent e) {
      if (e.getButton() == MouseEvent.BUTTON3 || e.getButton() == MouseEvent.BUTTON1) {
        try {setClosed(true);//dispose() //doDefaultCloseAction();}
        catch (PropertyVetoException ex) { }
      }
    }
    ....
  }
}



Это сообщение отредактировал(а) SATYR - 24.4.2009, 13:22
PM MAIL   Вверх
aleksandy
Дата 24.4.2009, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



Приведенный код нерабочий. Или давай работоспособный код, либо опиши что тебе требуется...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1217 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.