Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

(Я не знаю автора приведенного выше; это только один из первых, что я нашел с поиском Java applet mouseedragged.)

Другие советы

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

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

Хотя окна (и, возможно, другие) поддерживают захват мыши, 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);
JComponent.setAutoScrolls(...);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top