Как многокнопочные нажатия обрабатываются в разгаре?
Я испытываю странное поведение при использовании стилуса с качелями.
Я интерпретирую нажатие кнопки сбоку стилуса (ВПРАВО) и нажатие стилуса вниз (ВЛЕВО) как событие "Захват", но иногда (чаще, чем 0) события просто удаляются.
JavaDocs для MouseEvent довольно ясно рассказывают о том, как обрабатываются многокнопочные нажатия, если они выполняются по одному (слева вниз, справа вниз, справа вверх, влево вверх), но ничего не говорят об одновременных нажатиях кнопок.
У меня остается вопрос, будут ли они генерироваться как два события mousePressed, или как одно с маской кнопки, установленной для обеих кнопок, или как что-то еще полностью?
Благодарю.
3 ответа
Я бы интерпретировал документ API как одновременное нажатие кнопки просто невозможно:
При нажатии нескольких кнопок мыши каждое нажатие, отпускание и щелчок приводит к отдельному событию.
Так что должны быть отдельные события. Проблемы, с которыми вы сталкиваетесь, могут быть связаны с ошибками в вашем коде, драйвере стилуса, оборудовании или Swing (это, по моему мнению, в порядке убывания вероятности:)
Я бы попытался диагностировать проблему, регистрируя события на разных уровнях, если это возможно.
Одновременное нажатие кнопки обрабатывается как два отдельных события mousePressed. Запустите демонстрацию событий мыши, чтобы увидеть, как они обрабатываются отдельно.
Насколько я помню, нет способа справиться с одновременным нажатием кнопки. То, что я использовал, чтобы гарантировать, что несколько нажатых кнопок одновременно обрабатывались как таковые, было то, что у меня была бы логическая переменная для каждой кнопки, и когда она была нажата, я устанавливал бы ее в значение true, и когда она была отпущена, я устанавливал логическое к ложному. Затем, когда пришло время выполнить действие, я бы проверил логические переменные (иногда мне приходилось перенаправлять actionlistener на вызов метода, чтобы определить, какое действие должно было произойти после установки логических значений). Это не работает, если единственное, что вы хотите сделать, это нажать их в одно и то же время, но если вы просто пытаетесь заставить комбинации работать, то я так и сделал. Это было около 4 лет назад, до Java 5, так что я могу ошибаться.