On Fri, 11 Jul 2025 15:29:10 GMT, Andy Goryachev <[email protected]> wrote:
>> Issue is when `JFXPanel `is used to embed some JavaFX components and 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 showing
>> "block" sign suggesting DnD is blocked.
>>
>> The problem is in both drag and drop side of operations where `acceptDrag
>> `and `acceptDrop `on `DropTargetDragEvent `is not called because `DragEvent
>> constructor` called from `Scene `
>> [which is called from `SwingDnD `via
>> `EmbeddedSceneDTInterface.handleDragEnter` and `handleDragDrop]
>> `
>> is not storing `state.acceptedTransferMode` when eventType is not
>> `DragEvent.DRAG_DROPPED` or `DragEvent.DRAG_DONE` but Scene creates
>> DragEvent with only `DragEvent.ANY`
>> so `handleDragEnter `and `handleDragDrop `returns null as
>> `DragEvent.getAcceptedTransferMode` returns null
>>
>> Fix is made so that instead of relying on return value of
>> handleDragEnter/handleDragDrop which seems to be always null for reason
>> mentioned above, we rely on `isDataFlavorSupported `check for the drag and
>> drop as is being done in JDK side of DnD scheme.
>> Also, to have a proper drop of the data, we get the focus owner from the
>> JFXPanel scene and insert the text in the location pointed to by the mouse
>> cursor.
>>
>> Regression test is already present in
>> tests/manual/swing/DragDropOntoJavaFXControlInJFXPanelTest.java
>
> modules/javafx.swing/src/main/java/com/sun/javafx/embed/swing/SwingDnD.java
> line 203:
>
>> 201: javafx.embed.swing.JFXPanel jfxPanel =
>> (javafx.embed.swing.JFXPanel)comp;
>> 202:
>> 203: if (jfxPanel.getScene().getFocusOwner()
>> instanceof javafx.scene.control.TextField tf) {
>
> This cannot possibly work:
>
> a) does not build
> b) what if the drop target is not a TextField, but some other editable text
> component (a TextArea or a rich text editor of some sort)?
Yes, this the wrong approach. The javafx.swing module does not (and should not)
depend on javafx.controls. Drag and Drop is a scene graph operation and can be
targeted to any node, even nodes that are not Controls.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1843#discussion_r2201184345