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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заблокировать кнопку закрытия JFrame, Как заблокировать кнопку закрытия JFrame 
:(
    Опции темы
skif18
Дата 12.10.2010, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как заблокировать кнопку закрытия JFrame? Есть кнопка на форме выполняющая ещё дополнительные действия. Но нужно закрыть "крестик" в заголовке фрейма. Чтоб не путать юзеров. 


--------------------

PM MAIL ICQ   Вверх
jk1
Дата 12.10.2010, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Skipy
Дата 12.10.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(skif18 @ 12.10.2010,  09:08)
Как заблокировать кнопку закрытия JFrame? Есть кнопка на форме выполняющая ещё дополнительные действия. Но нужно закрыть "крестик" в заголовке фрейма. Чтоб не путать юзеров.

Вот именно это их и запутает. Если я вижу "крестик" - я ожидаю определенного поведения. Конкретно - что окно закроется, если я на него кликну. Так что либо убираете "крестик" вообще (а это Вы запаритесь, надо будет переключаться в не-native UI и пытаться добраться до этой кнопки, если это вообще кнопка!), либо приравниваете его к кнопке "Cancel", как это сделано во всех нормальных приложениях.

UPD. Исследования показывают, что добраться до кнопки можно. Но нужно опираться на внутреннюю структуру JRootPane, которая нигде не светится и, следовательно, может меняться, а также на определенный LookAndFeel. 

Это сообщение отредактировал(а) Skipy - 12.10.2010, 18:14


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Connie
Дата 12.10.2010, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А есть еще Alt+F4 ))) кроме кнопки

На крайний случай, если сильно надо, можно сделать свою декорацию окна

http://download.oracle.com/javase/tutorial...ents/frame.html

Это сообщение отредактировал(а) Connie - 12.10.2010, 19:59
PM MAIL WWW   Вверх
aleksandy
Дата 13.10.2010, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



skif18, 
по-моему, тебе просто необходимо повесить на закрытие окна слушателя, в котором вызывать дополнительные действия. Эти действия вынести в отдельный метод и дергать его не только из слушателя закрытия окошка, но и в обработчике кнопки.
PM   Вверх
skif18
Дата 15.10.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



aleksandy, так собственно и сделал...

Код

this.addWindowListener(new WindowAdapter() {            
                @Override
                public void windowClosing(WindowEvent e) {
             //    System.out.println("actionPerformed()");
                 upd=2;
                 update();
                 try{    
//                     System.out.println(" 0  to  vhod.txt ");
                        PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream("vhod.txt"), "utf-8"));
                        writer.write("0");
                        writer.flush();    
                        System.out.println(" 0  to  vhod.txt ");
                         writer.close();
                    }catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                    System.exit(0);
                }
            });


Но вот в чем проблема. У меня срабатывает нормально. А у некоторых юзеров нет. Вот и ищу альтернативы.


--------------------

PM MAIL ICQ   Вверх
Skipy
Дата 15.10.2010, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А что значит "не отрабатывает нормально"? Как отрабатывает? Что происходит?


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
skif18
Дата 20.10.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Skipy, write не всегда срабатывает, а косяк пока найти не смог...


--------------------

PM MAIL ICQ   Вверх
Skipy
Дата 20.10.2010, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Он либо срабатывает, либо нет. Если нет - должно быть исключение, от которого можно отталкиваться. У Вас оно идет в консоль и с некоторой вероятностью просто его никто не видит.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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