Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8141391

Manual JFXPanel DnD test doesn't work

XMLWordPrintable

    • b25
    • x86_64
    • windows_7

      FULL PRODUCT VERSION :
      java version "1.8.0_65"
      Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
      Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 6.1.7601]

      A DESCRIPTION OF THE PROBLEM :
      We have a swing application. It uses JFXPanel to embed some JavaFX components (mainly WebView). When we drag something from swing or an external application and try to drop on a JavaFX component inside the JFXPanel, it doesn't accept the drop.

      REGRESSION. Last worked in version 7u76

      ADDITIONAL REGRESSION INFORMATION:
      java version "1.7.0"
      Java(TM) SE Runtime Environment (build 1.7.0-b147)
      Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run the sample application drag the "Drag me" label and try to drop it in the second text box.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The text box excepts the drop.
      ACTUAL -
      The text box doesn't except the drop.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import javafx.application.Platform;
      import javafx.embed.swing.JFXPanel;
      import javafx.scene.Scene;
      import javafx.scene.control.TextField;
      import javafx.scene.layout.HBox;
      import javafx.scene.layout.Priority;

      import javax.swing.*;

      import java.awt.FlowLayout;
      import java.awt.Point;
      import java.awt.datatransfer.StringSelection;
      import java.awt.datatransfer.Transferable;
      import java.awt.dnd.DnDConstants;
      import java.awt.dnd.DragSource;
      import java.awt.event.MouseAdapter;
      import java.awt.event.MouseEvent;

      public class DnDTest {

        public static void main(final String... pArguments) {
          SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
              JFrame frame = new JFrame("DnDTest");
              frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

              JRootPane rootPane = frame.getRootPane();
              rootPane.setLayout(new FlowLayout());
              JLabel label = new JLabel("Drag me");
              label.setTransferHandler(new TransferHandler() {
                @Override
                protected Transferable createTransferable(final JComponent pComponent) {
                  return new StringSelection("Drag text");
                }

                @Override
                public int getSourceActions(final JComponent pComponent) {
                  return DnDConstants.ACTION_COPY;
                }
              });
              MouseAdapter dragGestureRecognizer = new MouseAdapter() {
                private Point mPoint;

                @Override
                public void mousePressed(MouseEvent pEvent) {
                  mPoint = pEvent.getPoint();
                }

                @Override
                public void mouseReleased(MouseEvent pEvent) {
                  mPoint = null;
                }

                @Override
                public void mouseDragged(MouseEvent pEvent) {
                  if (mPoint == null) {
                    mPoint = pEvent.getPoint();
                  }
                  double distance = pEvent.getPoint().distance(mPoint);
                  if (distance > DragSource.getDragThreshold()) {
                    JComponent component = (JComponent) pEvent.getComponent();
                    TransferHandler transferHandler = component.getTransferHandler();
                    transferHandler.exportAsDrag(component, pEvent, DnDConstants.ACTION_COPY);
                  }
                }
              };
              label.addMouseListener(dragGestureRecognizer);
              label.addMouseMotionListener(dragGestureRecognizer);
              rootPane.add(label);
              rootPane.add(new JTextField("Drop works here"));

              final JFXPanel panel = new JFXPanel();
              Platform.runLater(new Runnable() {
                @Override
                public void run() {
                  TextField textField = new TextField("Drop doesn't work here");
                  HBox hBox = new HBox();
                  HBox.setHgrow(textField, Priority.ALWAYS);
                  Scene scene = new Scene(hBox);
                  hBox.getChildren().add(textField);
                  panel.setScene(scene);
                }
              });
              rootPane.add(panel);

              frame.setSize(500, 400);
              frame.setLocationRelativeTo(null);
              frame.setVisible(true);
            }
          });
        }
      }

      ---------- END SOURCE ----------

      =========================================================

      KCR: Updated on 2025-07-15

      EVALUATION: The above program is in error, as was the manual test program checked into our repo. We are going to repurpose this bug to fix the manual test program.

            psadhukhan Prasanta Sadhukhan
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            9 Start watching this issue

              Created:
              Updated:
              Resolved: