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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cделать панели невидимыми 4ерез некоторое время 
V
    Опции темы
kostay
Дата 22.5.2007, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



порылся я на форуме так и не нашол то 4то мне нужно, а то 4то нашол ни4его не понел...

есть панели при нажатии на кнопку они появляются, 4ерез 3 секунды мне надо 4тоб они ис4езли снова.

4ерез thread.sleep(3000) блокируется вся программа, а 4ерез Timer я вообше ни4о не понел. жду подсказок )
PM MAIL   Вверх
filipp76
Дата 22.5.2007, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(kostay @  22.5.2007,  03:20 Найти цитируемый пост)
4ерез thread.sleep(3000) блокируется вся программа

Насколько я понял то thread.sleep(3000) ты используеш в основном классе или главном фрейме?
Я бы порекомендовал вынести логику "появления панелей" в отдельный поток и все таки использовать thread.sleep(3000). 
Цитата(kostay @  22.5.2007,  03:20 Найти цитируемый пост)
4ерез Timer я вообше ни4о не понел

Таймер тут не совсем подходит как мне кажется. Ведь он будет выполнять действие через определенный промежуток времени. Хотя можно использовать и его.
Вот пример потока
Код

public class MyThread extends Thread {
   
   public void run() {
   //тут появляются панели

     try{
     Thread.sleep(delay);//задержка
     }catch(InterruptedException e){} 

    //тут панели исчезают
   }

}

 
Запускаеш поток так:
Код

MyThread t = new MyThread();
t.start();

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


Бывалый
*


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

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



Код

public class MyThread extends Thread {
   
   public void run() {
   panel.seVisible(true);

     try{
     Thread.sleep(3000);
     }catch(InterruptedException e){} 

    panel.seVisible(false);
   }

}

GUI class
...
exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                  .....
                  MyThread t = new MyThread();
                   t.start();
            }
        });


так? класс MyThread увидит панели?
PM MAIL   Вверх
filipp76
Дата 22.5.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(kostay @  22.5.2007,  10:10 Найти цитируемый пост)
так? класс MyThread увидит панели?

в фрейме где находится панель, напишите метод который и будет менять значение Visible у панели.

Код

public void setPanelVisible(boolean value){
 panel.setVisible(value);
} 


и замените

Код

public class MyThread extends Thread {
   
   public void run() {
   Frame.setPanelVisible(true);

     try{
     Thread.sleep(3000);
     }catch(InterruptedException e){} 

    Frame.setPanelVisible(false);
   }

}


и все должно работать.

Это сообщение отредактировал(а) filipp76 - 22.5.2007, 13:45
PM MAIL WWW ICQ   Вверх
kostay
Дата 22.5.2007, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



спасибо
PM MAIL   Вверх
kostay
Дата 23.5.2007, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



всё полу4илось, но в отдельном класе не работало, NullPointerException, а вот как внутренний класс полу4илось.

вот так я запускаю:
Код

new MyThread().start();

вот так он выглядит:
Код

public class MyThread extends Thread {

        public void run() {

            showSaved();
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {}

            showInfo();
        }
    }

проблема в том, 4то если жмёш на кнопку несколько раз то он не запускается а продолжается и отшот вроде как идёт после первого нажатия/неуверен, тоесть если быстро нажимать пока не прошло 3 секунды и панель не ис4езла то на какойто раз придётся пол секунды и панель ис4езает, как бы ето поправить, вот еслиб етот тхреад убивать после того как я полу4ил то 4то хо4у, то наверно можноб было его заного запустить... вобшем вот.

Это сообщение отредактировал(а) kostay - 23.5.2007, 02:18
PM MAIL   Вверх
filipp76
Дата 23.5.2007, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(kostay @  23.5.2007,  01:38 Найти цитируемый пост)
NullPointerException

Насчет этого тебе ничего не скажу, я сам только учусь..)

Цитата(kostay @  23.5.2007,  01:38 Найти цитируемый пост)
проблема в том, 4то если жмёш на кнопку несколько раз то он не запускается а продолжается и отшот вроде как идёт после первого нажатия/неуверен, тоесть если быстро нажимать пока не прошло 3 секунды и панель не ис4езла то на какойто раз придётся пол секунды и панель ис4езает, как бы ето поправить, вот еслиб етот тхреад убивать после того как я полу4ил то 4то хо4у, то наверно можноб было его заного запустить... вобшем вот.


В качестве события на кнопку рекомендую использовать MousePressed
В твоем примере если будеш тыкать на кнопку много раз то и поток будт запускатся n-е количество раз.
Потому рекомендую например сделать какое-нить поле в GUI классе(где лежит panel),  типа boolean(пусть назыв. Value) и инициализируеш его как false. При нажатии на кнопку проверяеш, если значение false тогда запускаеш поток.
Запускаеш так(пишеш о обработчике события)

Код

if(Value==false){
 Value=true
 MyThread t = new MyThread();
 t.start();
}


Поток пишеш так
Код

public class MyThread extends Thread {

       synchronized public void run() {

            showSaved();

            try {
             Thread.sleep(3000);
            } catch (InterruptedException e) {}

            showInfo();
            Value=true;//напиши метод для изменения значения Value
            return;//выход из потока
        }
    }

В таком случае ты обезопасиш себя от многократного запуска потока при многоразовом нажатии на кнопку. При таком коде если сразу панель у тебя видна то после запуска она исчезнет, задержка 3 секунды и появится.


Это сообщение отредактировал(а) filipp76 - 23.5.2007, 10:54
PM MAIL WWW ICQ   Вверх
dorogoyIV
Дата 23.5.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



Цитата

проблема в том, 4то если жмёш на кнопку несколько раз

можно с кнопки снять обработчик
Код

jbutton.removeActionListener(ActionListener);

т.е. слушатель 

Это сообщение отредактировал(а) dorogoyIV - 23.5.2007, 13:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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