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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в JTable с задержкой 
V
    Опции темы
KidA
Дата 27.9.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день всем.

Есть таблица. Поиск в таблице начинается сразу после ввода символа в JTextField. Если таблица большая (несколько тысяч записей), то поле ввода зависает, потому что уже пошел поиск. Поэтому трудно ввести сразу 4-5 символов, по которым нужен поиск.

Задача следующая: 
Как начать поиск не сразу, а по истечении некоторого времени, например, 1 сек.


PM MAIL   Вверх
LSD
Дата 27.9.2006, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Когда пользователь вводит в JTextField букву, запускай таймер на 1-2 сек. По истечении которого начинай поиск. Если пользователь вводит еще букву, то проверяешь было ли выполнено предыдущее задание, если нет, то отменяешь его и создаешь новое.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
powerOn
Дата 27.9.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



задержку можно сделать вызовом Thread.sleep(1000) к примеру; Но тут еще больше вопросов возникает с синхронизацией и определением моментов, когда можно считать, что пользователь ввел нужную комбинацию символов, а когда еще только вводит.

А вообще, не плохо бы кнопку поставить, по нажатию которой стартует поиск. Или сам поиск как-то оптимизировать, чтобы зависаний небыло.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
LSD
Дата 27.9.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(powerOn @  27.9.2006,  18:29 Найти цитируемый пост)
задержку можно сделать вызовом Thread.sleep(1000) к примеру

Если мы так сделаем в коде обработчика события, то остановим AWT-шный поток и результат будет даже хуже чем сейчас. А если создавать отдельный тред, то надо думать как ему отсрочить запуск поиска, если пользователь ввел еще один символ в поле, т.е. фактически получим тот же таймер.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
KidA
Дата 27.9.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а возможно ли это сделать без нового треда(ради поиска вводить пятый поток не хочется)?

PM MAIL   Вверх
LSD
Дата 27.9.2006, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Без нового треда нет, полюбому. Но можно обойтись одним таймером на все приложение (плюс он много еще чего может делать).
Код
{
  public static final int DELAY = 1000;

  private SearchTask task;
  private Timer timer = new Timer("my-application-timer", true);

  public void keyReleased(KeyEvent e)
  {
    if(task != null)
      task.cancel();
    task = new SearchTask(textArea.getText());
    timer.schedule(task, DELAY);
  }

  private class SearchTask extends TimerTask
  {
    public SearchTask(String textToFind)
    {
      ....
    }

    public void run()
    {
      //do search
      task = null;
    }
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
KidA
Дата 27.9.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



большой пасиб
PM MAIL   Вверх
powerOn
Дата 27.9.2006, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(LSD @  27.9.2006,  18:46 Найти цитируемый пост)
Цитата(powerOn @  27.9.2006,  18:29 Найти цитируемый пост)
задержку можно сделать вызовом Thread.sleep(1000) к примеру

Если мы так сделаем в коде обработчика события, то остановим AWT-шный поток и результат будет даже хуже чем сейчас. А если создавать отдельный тред, то надо думать как ему отсрочить запуск поиска, если пользователь ввел еще один символ в поле, т.е. фактически получим тот же таймер.



Когда это писал, я подразумевал, что данный метод (Thread.sleep(1000)) будет вызван в потоке поиска, и естественно, не в потоке рассылки сообщений.



--------------------
user posted image нет времени думать - нужно писать КОД!

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.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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