Pregunta

Me escribió una aplicación donde pueden arrastrarse hacia la izquierda y la derecha alguna línea de tiempo. Cuando lo haga arrastrando sé que este es un evento mouseDragged. Desde muevo componente cursor fuera del ratón se deja de arrastrar, pero yo no quiero eso.

Así que quiero bloquear de alguna manera evento mouseDragged en ese componente, pero si me mudo componente fuera del cursor, no consigo caso mouseDragged más.

¿Cómo puedo solucionar esto? Mi colega me dice que existe alguna función como captureMouse.

¿Fue útil?

Solución

No creo que sea una idea tan buena para capturar el ratón. Asimismo, no creo que sea necesario por lo que quieres.

En mi experiencia, mouseDragged () eventos funcionan bien incluso cuando se mueve el exterior del ratón de la zona componente, no se seguirá informando las posiciones X e Y en el interior del componente que están más cercanos a la ubicación exterior del componente del ratón, pero no va a terminar el arrastre del ratón como si se hubiera soltado el botón izquierdo.

Si el comportamiento de su aplicación es diferente, tal vez usted tiene un error diferente en su manejo del ratón?

Por ejemplo, probar la forma en la mitad del applet abajo en esta página: verá que se puede empezar a arrastrar el rectángulo y mover el ratón fuera del área del applet, y se continuará el trabajo: http://www.dgp.toronto.edu/~mjmcguff/ aprender / java / 04-mouseInput /

(no sé el autor del código anterior, es sólo uno de los primeros que se encontró con una búsqueda de Java Applet mouseDragged .)

Otros consejos

¿Qué parte de su 'línea de tiempo' es el componente real de recibir el evento mouseDragged ()? Normalmente en la recepción de este evento que mover el componente para que coincida con la acción de arrastre - de esa manera, el componente debe estar siempre bajo el ratón y siempre recibir el evento mouseDragged () hasta que renunciar a ella. ¿Se traslada este componente como de procesar los eventos? Un pequeño rectángulo en forma de botón utilizado como un control deslizante sería un excelente componente para su uso.

(Si usted está tratando de tratar a toda su línea de tiempo como el componente y por lo tanto no se están moviendo para que coincida, ¿qué es lo que desea que suceda si el usuario arrastra el ratón mientras que fuera?)

Aunque Windows (y posiblemente otros) de soporte capturar el ratón, Java no parece. Usted puede ser capaz de proporcionar una cola de eventos personalizado algo como esto:

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(...);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top