| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > фильтрация вводимых знаков keyPressed |
| Автор: tavla 5.5.2013, 01:03 |
| привет. нужно запретить в JTextPane ввод знаков '(апостроф) и "(кавычка). использую для этого keyPressed, но все-равно проскальзывают. помогите с кодом, пожалуйста. |
| Автор: dorogoyIV 5.5.2013, 03:11 |
| keyReleased |
| Автор: Mirkes 5.5.2013, 16:06 |
| Я с этим тоже сталкивался. Почему keyPressed и buttonPressed (mouse), работают коряво, а вот keyReleased и buttonReleased работают нормально? |
| Автор: tavla 5.5.2013, 21:13 | ||
| как я понимаю, очередность событий такая: 1 - KeyPressed для каждой из нажатых клавишь (если shift+ символ - значит два события KeyPressed). 2 - KeyTyped для символа, который получился на предыдущих шагах. 3 - KeyReleased для каждой из нажатых клавишь. например, для маленькой а: - KeyPressed для "а". - KeyTyped для "а". - KeyReleased для "а". для заглавной А (shift+a): - KeyPressed для shift. - KeyPressed для "а". - KeyTyped для "А". - KeyReleased для "а". - KeyReleased для shift. по идее, чтобы не заморачиваться с раскладкой клавиатуры и не перехватывать шифты, проще обрабатывать введенный символ в KeyTyped. запустил в дебагере пример, в котором все маленькие n должны заменяться на m, т.е. следующая последовательность событий: - KeyPressed для "n". - KeyTyped для "n". - KeyReleased для "n". пытаюсь заменить "n" на "m" на каждом шаге:
результат: 1. в KeyPressed "n" перехватывается, срабатывает условие и e.setKeyCode(KeyEvent.VK_M) System.out.println - n System.out.println - M 2. в KeyTyped условие if (e.getKeyCode() == KeyEvent.VK_N) не выполняется System.out.println - n System.out.println - Unknown keyCode: 0x0 3. в KeyReleased опять срабатывает условие if (e.getKeyCode() == KeyEvent.VK_N) и e.setKeyCode(KeyEvent.VK_M) System.out.println - n System.out.println - M в textPane печатается "n". почему так? невозможно вмешаться в основной поток ввода? |
| Автор: tavla 5.5.2013, 22:55 | ||||
| решено: замена n на m
запрет ввода n
|
| Автор: leskar 9.8.2013, 14:22 |
| По-моему правильнее использовать свой документ. Вот пример: http://www.java2s.com/Tutorial/Java/0260__Swing-Event/CustomDocumentFilter.htm |