       (mouseExited [event]
         (with-swing-threads* (exited (translate-event event))))
       (mouseClicked [event]
-        (with-swing-threads* (clicked (translate-event event)))))))
+        (with-swing-threads* (clicked (translate-event event))))
+      (mouseMoved [event]
+        (with-swing-threads* (message-box "MOVED")
+          (moved (translate-event event))))
+      (mouseDragged [event]
+        (with-swing-threads* (dragged (translate-event event)))))))
+
 
 
 ;;; managed/unmanaged interop

                           :modifiers (translate-modifier (.getModifiersEx event))
                           :position [(.getX event) (.getY event)]
                           :buttons-down (translate-pressed-btns (.getModifiersEx event))})]
    (proxy [MouseListener] []
      (mousePressed [event]
        (with-swing-threads* (pressed (translate-event event))))
      (mouseReleased [event]

     released  _mouse button up event
     entered   _mouse enters widget
     exited    _mouse exits widget
     clicked   _mouse button clicked
     moved     _mouse has been moved
     dragged   _mouse has been dragged"
  [pressed released entered exited clicked moved dragged]
  (let [translate-button {MouseEvent/NOBUTTON 0
                          MouseEvent/BUTTON1  1
                          MouseEvent/BUTTON2  2
