ФорумПрограммированиеБольше языковJava → Имитация работы клавиатуры(и не только)

Имитация работы клавиатуры(и не только)

  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 октября 2009 г. 15:09

    Всем привет. Вообщем то прочел том один по джаве. Пишу первое приложение.
    Интересует вот что. Можно ли как то иным образом имитировать нажатие клавиш(ну или кликов кнопок мыши), не прибегая к использования класса Robot? Я понял, что этот класс нацелен на дебаговые действия.
    Что мне надо? По теме надеюсь, ясно). имитировать в текстовом поле нажатия клавиш с клавиатуры.
    Перерыл много чего. Сам вот класс KeyEvent - заинтересовало что в доке есть конструктор. В книжке где я читал, примера его использования я не видел да и в недрях нета чтото молчат о нем. Мда, сложновато на 1й взгляд выглядит - определения конструктора с параметрами, но главное, мне почемуто кажеться что этот клас просто инициируеться и никаких имитаций не делает.

    KeyEvent(Component source, int id, long when, int modifiers, int keyCode, char keyChar) 

    Вообщем, после его использования, компилятор то скомпилил файл, но изминений никаких…
    Мне кажется я вообще не в ту сторону двигаюсь.
    Буду очень признателен если хоть малейшый намек кинете)…
    Спустя 118 сек.
    class KeyEvent - An event which indicates that a keystroke occurred in a component.
    Просто мониторит нажатия клавиш значит.
    Ну то что в обработчиках он используеться для выслежывания нажатий клавиш - это я в курсе. Пробовал.
    А вот тут как быть….
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 октября 2009 г. 15:10, спустя 1 минуту 27 секунд

    так а что сложного то? …. обработчик нажатия - обычная функция класса. просто вызови ее с нужными параметрами да и все …

    если я правильно понял вопрос
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 октября 2009 г. 15:14, спустя 3 минуты 57 секунд

    phpdude, Не-не)…
    то я в курсах)….
    Я хочу имитировать нажатие клавиши так чтобы символ соответствующий отобразился в текстАрее))
    Обработчик(тот что имплементирует KeyListener) - просто же выслежывает нажатия самих клавиш…..
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 26 октября 2009 г. 15:20, спустя 5 минут 51 секунду

    Тогда зачем тут вообще обработчик, по-моему все просто, просто пишешь символ в текстарею, необходимый и все. Зачем усложнять
    Спустя 25 сек.
    или я не понимаю суть задачи
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 26 октября 2009 г. 15:27, спустя 7 минут 20 секунд

    обработчик что делает? а листенер? ОН ЗАПУСКАЕТ ФУНКЦИИ по получени нажатий, так ты просто ЗАПУСТИ ФУНКЦИИ. хули такого? :)
    Сапожник без сапог
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 октября 2009 г. 15:30, спустя 2 минуты 40 секунд

    krasun, Допустим)
    Я тоже сначала так думал - в обработчике выследить что нажимается, это символ записать там в память/буфер, и этот символ превращая в стринг вбивать тупо в текстарею…
    Но суть задачи - это откат/повтор(undo/redo) действий, которые творяться в поле(текстАреа)……Там бы надо было не только вставлять/отрезать символы, но и имитировать некие сложнейшие действия…..Я пришел к выводу что это и есть имитация клавиш…..

    Вот и все, как бы тут…
    Но, может я немного алгоритм не так сопоставляю…для решения этой задачи….
    В прикладном кодинге - пока не очинь.
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 октября 2009 г. 15:38, спустя 8 минут

    phpdude, Мне функцию запускать не надо)
    мне надо - грубо говоря - "вписать символ в текстарею без нажатия клавиши". Словно так, как бы это бы сделал метод Robot.keyPress(int keyKode)/Robot.keyRelease(int keyKode);
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 26 октября 2009 г. 17:07, спустя 1 час 29 минут 7 секунд

    phpdude, не ты не понял

    есть его объект текстареи у которого переопределен onKeyDown(Event e)
    и он хочет его запускать так чтоб
    onKeyDown(new KeyEvent(…))
    но так незя
    юзай робот

    чтобы вписать чтото в текст арею пробуй писать

    TextField tf = new TextArea(…)
    tf.setText("ебанирот")
  • Rotten

    Сообщения: 2243 Репутация: N Группа: Адекваты

    Spritz 26 октября 2009 г. 17:44, спустя 36 минут 34 секунды

    CTAPbIu_MABP,
    Немножко не то)….
    смотри..
    во-первых у меня никакой OnKeyDown не переопределен….Зачем? я ж не могу заведомо знать что пользователь нажмет))…
    А если переопределять чтото - то явно все методы с интерфейса KeyListener….
    2. чтобы присвоить текст в текстарию - не обязательно присваивать тип TextField.
    можно просто
    textArea.setText("fuck_off");
    , техтария просто наследует этот метод в javax.swing.text.JTextComponent
    Но дело не в этом….Дело в том что присваивая заново весь текст - мы стираем все что было до того..а если изминения было произведены в какойто маленькой части всего текста?…..
    Короче…..тут наверное без того Робота н еобойтись…
    так и сделаю….значит..
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 27 октября 2009 г. 16:53, спустя 23 часа 9 минут 20 секунд

    Rotten, главное что ты мну понял
  • grigoriyi

    Сообщения: 9 Репутация: N Группа: Кто попало

    Spritz 17 января 2010 г. 22:43, спустя 82 дня 5 часов 50 минут


    phpdude, Мне функцию запускать не надо)
    мне надо - грубо говоря - "вписать символ в текстарею без нажатия клавиши". Словно так, как бы это бы сделал метод Robot.keyPress(int keyKode)/Robot.keyRelease(int keyKode);


    а зачем такие сложности?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!