JavaFX SWT and Swing-Interopt
Tom Schindl
tom.schindl at bestsolution.at
Tue Jul 31 12:51:26 UTC 2018
Hi,
I'm on Mac as well and just gave 8u181 a spin and see the same problem
(beside others eg the DropDown popup does not move with window).
Just to make sure: It is curcial to not only bring up the DropDown-List
but also open the Dialog-Window with the color-spectrum, ... .
Tom
On 31.07.18 14:34, Michael Paus wrote:
> 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
>>>>>>
>>>
>>
>
--
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