Событие блокировки при выходе мыши из Java - PullRequest
1 голос
/ 08 ноября 2010

Я написал приложение, в котором вы можете перетаскивать левую и правую некоторые временные шкалы.Когда я делаю перетаскивание, я знаю, что это событие mouseDragged.Поскольку я перемещаю курсор мыши за пределы компонента, он перестает перетаскивать, но я не хочу этого.

Поэтому я хочу каким-то образом заблокировать событие mouseDragged для этого компонента, но если я перемещаю курсор за пределы компонента, я не получаюсобытие mouseDragged больше.

Как я могу решить это?Мой коллега сказал мне, что существует такая функция, как captureMouse.

Ответы [ 3 ]

0 голосов
/ 08 ноября 2010

Я не думаю, что это хорошая идея, чтобы поймать мышь. Я также не думаю, что это необходимо для того, что вы хотите.

По моему опыту, события mouseDragged () работают нормально, даже если вы перемещаете мышь за пределы области компонента: он будет продолжать сообщать о положениях X и Y внутри компонента, которые находятся ближе всего к расположению мыши вне компонента, но это не прекратит перетаскивание мыши, как если бы вы отпустили левую кнопку.

Если поведение вашего приложения отличается, возможно, у вас другая ошибка при работе с мышью?

Например, попробуйте апплет на полпути вниз по этой странице: вы увидите, что вы можете начать перетаскивать прямоугольник и переместить указатель мыши за пределы области апплета, и он продолжит работать: http://www.dgp.toronto.edu/~mjmcguff/learn/java/04-mouseInput/

(я не знаю автора приведенного выше кода; это только один из первых примеров, которые я нашел при поиске java-апплета mousedragged .)

0 голосов
/ 08 ноября 2010
JComponent.setAutoScrolls(...);
0 голосов
/ 08 ноября 2010

Какая часть вашей «временной шкалы» является фактическим компонентом, получающим событие mouseDragged ()?Обычно при получении этого события вы перемещаете компонент в соответствии с действием перетаскивания - таким образом, компонент всегда должен находиться под мышью и всегда получать событие mouseDragged (), пока вы не отпустите его.Перемещаете ли вы этот компонент во время обработки событий?Маленький прямоугольник в виде кнопки, используемый в качестве ползунка, станет отличным компонентом для использования.

(Если вы пытаетесь рассматривать всю временную шкалу как компонент и поэтому не перемещаете ее в соответствии, что вы хотите случиться, если пользователь перетаскивает мышь, находясь снаружи?)

Хотя Windows (и, возможно, другие) поддерживают захват мыши, Java не отображается.Вы можете предоставить пользовательскую очередь событий примерно так:

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener()
    {
        public void eventDispatched(AWTEvent e)
        {
            // Look for mouse messages and handle them... 
        }

    }
, AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...