modules/swing/src/main/java/javafx/embed/swing/SwingNode.java

Print this page

        

@@ -38,12 +38,11 @@
 import javafx.beans.Observable;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.event.EventHandler;
 import javafx.geometry.Point2D;
-import javafx.scene.Node;
-import javafx.scene.Scene;
+import javafx.scene.*;
 import javafx.scene.input.KeyCode;
 import javafx.scene.input.KeyEvent;
 import javafx.scene.input.MouseButton;
 import javafx.scene.input.MouseEvent;
 import javafx.stage.Window;

@@ -639,10 +638,14 @@
                     SwingNode.this.minHeight = height;
                     SwingNode.this.impl_notifyLayoutBoundsChanged();
                 }
             });            
         }
+        @Override
+        public void invokeOnContentsThread(Runnable runnable) {
+            Platform.runLater(runnable);
+        }
     }
 
     private void ungrabFocus(boolean postUngrabEvent) {
         if (grabbed &&
             getScene() != null &&

@@ -670,11 +673,16 @@
     }
 
     private class SwingMouseEventHandler implements EventHandler<MouseEvent> {
         @Override
         public void handle(MouseEvent event) {
-            if (event.getEventType() == MouseEvent.MOUSE_PRESSED &&
+            // Disable the FX cursor updates when mouse enters SwingNode and enable bask when exits
+            if (event.getEventType() == MouseEvent.MOUSE_ENTERED) {
+                getScene().getWindow().impl_getPeer().setUpdatesCursor(false);
+            } else if (event.getEventType() == MouseEvent.MOUSE_EXITED) {
+                getScene().getWindow().impl_getPeer().setUpdatesCursor(true);
+            } else if (event.getEventType() == MouseEvent.MOUSE_PRESSED &&
                 !SwingNode.this.isFocused() && SwingNode.this.isFocusTraversable())
             {
                 SwingNode.this.requestFocus();
             }
             JLightweightFrame frame = lwFrame;