Нужно, чтобы при вводе символа в JTextField
мгновенно выполнялся код, замеряющий время ввода слова, важна каждая миллисекунда. Сейчас пытаюсь на главный JFrame
повесить KeyListener
, но думаю - это плохой способ, не синхронизированные потоки, все дела. Как можно узнать, что в поле ввели текст, как можно быстрее?
Нашёл решение, возможно не самое элегантное, но в моём случае сработало и полностью отвечает требованиям.
Создаём свой KeyListener
содержащий интерфейс KeyListener
:
private static class KListener implements KeyListener
{
private String str = "";
public void keyTyped(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE)
{if (!str.equals("")) str = str.substring(0, str.length() - 1);}
else if (code != KeyEvent.VK_SHIFT && code != KeyEvent.VK_ALT &&
code != KeyEvent.VK_CAPS_LOCK && code != KeyEvent.VK_CONTROL &&
code != KeyEvent.VK_ENTER && code != KeyEvent.VK_TAB &&
code != KeyEvent.VK_WINDOWS && code != KeyEvent.VK_CONTEXT_MENU)
str += e.getKeyChar();
}
public void keyReleased(KeyEvent e) {}
}
Если нажимаем Backspace
, то стираем последний символ, иначе добавляем символ введённый с клавиатуры в текст, если, конечно, это не функциональная клавиша (все функциональные клавиши проверять не стал, ибо не было нужды, да и так получилось немаленькое нагромождение в коде).
Осталось на наш JTextField
повесить KeyListener
:
textField.addKeyListener(new KListener(this));
Всё, теперь в переменной str
будет храниться текст, который содержится и в JTextField
и его можно обработать с минимальной задержкой.
если хочешь обрабатывать текст при вставке, стоит поиграться с этим:
((AbstractDocument)textComponent.getDocument()).setDocumentFilter(new DocumentFilter(){
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
super.insertString(fb, offset, modifyString(string), attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
super.replace(fb, offset, length, modifyString(text), attrs);
}
});
На сайте нашел пример где контроллером выступает сама JSP, насколько это плохо или наоборот хорошо? Каковы преимущества/недостатки такой реализации?
Пишу файловый менеджер и захотелось сделать все операции быстрееНачал с удаления
В вопросе TabLayout с отдельным классом на каждую вкладку без заголовков был предложен такой подход:
Здравствуйте, я могу передать содержимое уведомления в активити при нажатии на само уведомление через Intent, вызвав onNewIntent