JavaFX SWT and Swing-Interopt

Tom Schindl tom.schindl at bestsolution.at
Tue Jul 31 11:08:46 UTC 2018


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
>>
> 

-- 
Tom Schindl, CTO
BestSolution.at EDV Systemhaus GmbH
Eduard-Bodem-Gasse 5-7. A-6020 Innsbruck
Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck


More information about the openjfx-dev mailing list