JavaFX SWT and Swing-Interopt

Michael Paus mp at jugs.org
Tue Jul 31 12:34:46 UTC 2018


I did the test on a Mac.

MacOS High Sierra
OpenJDK12ea4
OpenJFX11ea20 (SDK)

I just ran the code and repeated the steps given by Tom.
* Bring up the DropDown-List
* Bring up the custom color dialog
* Click somewhere in the JFrame

Michael

Am 31.07.18 um 14:19 schrieb Kevin Rushforth:
> I ran the test program on Windows 7 using JDK-11+24 plus my local 
> build of openjfx 11, and I can't reproduce the problem. I suspect that 
> Prasanta is correct in that this was fixed for FX/Swing interop by 
> JDK-8185634 (on the FX side) and JDK-8187803 (on the AWT side). I 
> don't know why you and Tom are still seeing this bug. What platform 
> are you testing on?
>
> Note that this won't help SWT interop, though. A similar fix might be 
> needed there (once we understand why the Swing interop test program 
> isn't working for some of you).
>
> -- Kevin
>
> On 7/31/2018 4:45 AM, Michael Paus wrote:
>> Hi Tom
>> I gave it a try with the latest OpenJDK12ea and OpenJFX11ea and I still
>> see the same baviour which you described.
>> Michael
>>
>> Am 31.07.18 um 13:08 schrieb Tom Schindl:
>>> Hi,
>>>
>>> I give it a try but from the bug description and discussion I would 
>>> have
>>> assumed it deals with the opposite problems (Opening a Swing-Dialog 
>>> from
>>> an JavaFX-Application who uses Swing-Node).
>>>
>>> I also studied the code to see if how you make a JavaFX-Stage having a
>>> different owner but I could only find changes to AWT deal with this.
>>>
>>> Anyways I'll try to get it the latest master running. The issue states
>>> that it is fixed in 8u182 but only 8u181 is available and there are no
>>> EA-Builds of Java8 available anymore (Looks like Oracle does not want
>>> people to test fixes for upcoming 8-update anymore)
>>>
>>> Tom
>>>
>>> On 31.07.18 11:21, Prasanta Sadhukhan wrote:
>>>> Hi Tom,
>>>>
>>>> I am not able to see the problem in latest workspace. I believe this
>>>> issue is already fixed by JDK-8185634.
>>>>
>>>> Regards
>>>> Prasanta
>>>> On 7/31/2018 1:16 PM, Tom Schindl wrote:
>>>>> Hi,
>>>>>
>>>>> In one of our customers application we have major problems when
>>>>> embedding JavaFX into SWT (but from my tests the situation is 
>>>>> equal for
>>>>> Swing).
>>>>>
>>>>> In the end all windows (most commonly popup-windows) are affected
>>>>> because they don't have a parent-window assigned and so they can be
>>>>> hidden by the window embedding them - if the window opened is 
>>>>> Modal like
>>>>> eg the one from ColorPicker the JavaFX UI is also blocked.
>>>>>
>>>>> To see what I mean just use this snippet below and do the following:
>>>>> * Bring up the DropDown-List
>>>>> * Bring up the custom color dialog
>>>>> * Click somewhere in the JFrame
>>>>>
>>>>> You notice the following:
>>>>> * JavaFX Window is moved behind Swing-Window
>>>>> * JavaFX UI is blocked
>>>>>
>>>>>> package test;
>>>>>>
>>>>>> import javax.swing.JFrame;
>>>>>>
>>>>>> import javafx.application.Platform;
>>>>>> import javafx.embed.swing.JFXPanel;
>>>>>> import javafx.geometry.Pos;
>>>>>> import javafx.scene.Scene;
>>>>>> import javafx.scene.control.ColorPicker;
>>>>>> import javafx.scene.layout.BorderPane;
>>>>>>
>>>>>> public class TestSwingInterop extends JFrame {
>>>>>>           public TestSwingInterop() {
>>>>>>          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
>>>>>>          final JFXPanel fxPanel = new JFXPanel();
>>>>>>           add(fxPanel);
>>>>>>                    Platform.runLater(new Runnable() {
>>>>>>               @Override
>>>>>>               public void run() {
>>>>>>                   initFX(fxPanel);
>>>>>>               }
>>>>>>           });
>>>>>>      }
>>>>>>           private static void initFX(JFXPanel fxPanel) {
>>>>>>           // This method is invoked on JavaFX thread
>>>>>>           Scene scene = createScene();
>>>>>>           fxPanel.setScene(scene);
>>>>>>       }
>>>>>>           private static Scene createScene() {
>>>>>>          ColorPicker picker = new ColorPicker();
>>>>>>          BorderPane.setAlignment(picker, Pos.TOP_LEFT);
>>>>>>          BorderPane p = new BorderPane(picker);
>>>>>>                  return new Scene(p);
>>>>>>      }
>>>>>>
>>>>>>      public static void main(String[] args) {
>>>>>>          TestSwingInterop s = new TestSwingInterop();
>>>>>>          s.setBounds(100, 100, 1000, 800);
>>>>>>          s.setVisible(true);
>>>>>>      }
>>>>>> }
>>>>> I've tested this on Java8 and Java9 but didn't had a chance to run 
>>>>> it on
>>>>> the latest master.
>>>>>
>>>>> The problem is that the newly created JavaFX windows don't have the
>>>>> Native-Window as their parent but the EmbeddedStage (who is not 
>>>>> bound to
>>>>> a native-window handle). It looks like EmbeddedStage has already been
>>>>> prepared (see getRawHandle() : long) to support something like 
>>>>> that in
>>>>> future but com.sun.glass.ui.Window and its subclasses have never been
>>>>> extend to create a window based on a pure long-pointer.
>>>>>
>>>>> The only exception and the reason I guess the strategy would work was
>>>>> used for Applets.
>>>>>
>>>>> Before diving deeper into this I wanted to get a feedback from people
>>>>> who know things better: Does the strategy of passing along the window
>>>>> pointer (eg from SWT, don't know about Swing yet) to Glass and 
>>>>> using it
>>>>> as the parent pointer sound like a proper idea?
>>>>>
>>>>> Tom
>>>>>
>>
>



More information about the openjfx-dev mailing list