JavaFX SWT and Swing-Interopt
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Tue Jul 31 09:21:48 UTC 2018
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