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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятное поведение JTextField 
:(
    Опции темы
esselt
Дата 3.10.2005, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Netbeans 4.1, JDK1.5.0_04

Есть JTextField, у которого повешен listener на событие keyTyped.
В обработчике читеатся JTextField.getText(). Проблема в том, что он возвращает всегда на один символ меньше, чем введено в JTextField.

Это так задумано или где-то руки погнулись?
PM MAIL   Вверх
LSD
Дата 3.10.2005, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Не гарантированно, что ты получишь событие от кнопки, после того как оно будет обработанно компонентом. Если хочешь отслеживать изменение текста в документе используй textField.getDocument().addDocumentListener();.


--------------------
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   Вверх
carper
Дата 3.10.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



esselt

Код

 //В основном классе, делаете как-то так
  myJTextField extends JTextField {
  .......
  protected Document createDefaultModel() {
    return new NumDocument();
  }
  .........
}


 А тут так: 
 class NumDocument extends PlainDocument {
   .......
   //Ключевая функция :)
   /**
    *@param offs - с какого места вставляется строка/символ
    *@param str  - сама строка
    *@param  a   -  доп. характеристики (например, шрифт), не помню задействуется ли этот
    *   параметр именно в JTextField (обычно он равен null)
   */
   public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
      ......
   }
   .......
 }



Если это очередная попытка изобрести велосипед с проверкой вводимого значения, то рекомендую попристальнее посмотреть в сторону JFormattedTextField.

Если же нужна более сложная проверка, то присмотритесь еще к методам remove, shouldYieldFocus, public boolean verify(JComponent input) and public void focusGained(FocusEvent e) (ну и остальное по желанию).

Добавьте сюда паттерны (чтобы не изобретать велосипед еще и здесь), не забудьте, что Swing компоненты используют один (собственный) поток, т.е. поменьше диалогов и самовольного изменения текста где попало, не забудьте решить, что делать, если пользователь закроет форму с "неверным" текстом в поле, добавьте специй в виде красивого форматирования по выходу из поля ...

В результате сможете получить неплохое блюдо. smile


P.S. Я не поленился проделать такую работу только для основных компонентов.
В остальных случаях получилось разумнее использовать JFormattedTextField плюс проверку уже на этапе записи информации из этих полей куда-либо.
Вроде пользователи пока не жалуются, что их не водят за ручку. smile
PM MAIL   Вверх
esselt
Дата 3.10.2005, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здесь изобретается несколько иной велосипед smile

Это поле используется для ввода строки поиска в таблице. Соответственно - ввели символ (или удалили) и ищется наиболее подходящее значение в таблице.
PM MAIL   Вверх
LSD
Дата 3.10.2005, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



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


--------------------
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   Вверх
carper
Дата 3.10.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



esselt
Ну, тогда достаточно только того, что я привел в примере, а именно
insertString и remove (просто и быстро) - заодно можно будет и из буфера работать и позволить удалять символы. smile


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

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

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


 




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


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

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