Mixing JavaFX with Swing in different windows

Kevin Rushforth kevin.rushforth at oracle.com
Tue Apr 24 09:17:54 PDT 2012


If Richard agrees, I'm OK with moving it back to Platform.

-- Kevin


Anthony Petrov wrote:
> Rather than introducing many APIs, how about placing this mechanism to 
> the Platform class? It already contains the exit() method, so having 
> the methods that control the exit strategy there seems to make sense.
>
> -- 
> best regards,
> Anthony
>
> On 4/24/2012 7:53 PM, Kevin Rushforth wrote:
>>  > I wonder if http://javafx-jira.kenai.com/browse/RT-15011 can help 
>> with removing/re-adding a JFXPanel.
>>
>> The same mechanism could be used, but will likely need additional API 
>> on JFXPanel (since there is no Application instance, and since in the 
>> case of Swing Inerop it is the JFXPanel that needs to manage the 
>> life-cycle to meet Swing's needs).
>>
>> -- Kevin
>>
>>
>>
>> Anthony Petrov wrote:
>>> I wonder if http://javafx-jira.kenai.com/browse/RT-15011 can help 
>>> with removing/re-adding a JFXPanel. JIRA is down currently, but 
>>> here's some details:
>>>
>>> http://mail.openjdk.java.net/pipermail/openjfx-dev/2012-April/001202.html 
>>>
>>>
>>> -- 
>>> best regards,
>>> Anthony
>>>
>>> On 4/24/2012 7:24 PM, Jeff Martin wrote:
>>>> I have had general success with this - the only real trick I think 
>>>> is to create/modify your JavaFX scene from Platform.runLater(), 
>>>> which is a little bit of a dance. Below is some code that is 
>>>> working for me.
>>>>
>>>> The exception is that that when I remove the JFXPanel, then try to 
>>>> re-install it later, I get an exception along the lines of 
>>>> "Platform.exit() has already been called", which I think happens 
>>>> when JavaFX figures out that there is no more visible JavaFX UI.
>>>>
>>>> jeff
>>>>
>>>>
>>>> On Apr 24, 2012, at 9:04 AM, Josh Marinacci wrote:
>>>>
>>>>> Has anyone had luck building an app with one window that is Swing 
>>>>> and the other is JavaFX?  I want to slowly moving my large app 
>>>>> (LeonardoSketch.org)  over to JavaFX. I have built a new window in 
>>>>> JavaFX but I get some init errors on startup. Instead I can put 
>>>>> the FX content inside of a JXPanel, but many things break on the 
>>>>> FX side like drag and drop. I would rather run the FX content in a 
>>>>> real FX stage.  I am fine having one window be run on the FX 
>>>>> thread and one on the Swing thread with me being responsible for 
>>>>> synchronization via invokeLater calls.  I'm wondering if there is 
>>>>> any magic init-mojo required.
>>>>>
>>>>> Thanks
>>>>> Josh
>>>>
>>>> /**
>>>>  * Returns the JavaFX panel.
>>>>  */
>>>> public JFXPanel getJavaFXPanel()
>>>> {
>>>>     // If panel not set, create and set
>>>>     if(_jfxPanel==null) {
>>>>         _jfxPanel = new JFXPanel();
>>>>         Platform.runLater(new Runnable() { public void run() { 
>>>> initFX(); }});
>>>>     }
>>>>         // Return panel
>>>>     return _jfxPanel;
>>>> }
>>>>
>>>> /**
>>>>  * Load JavaFX panel.
>>>>  */
>>>> private void initFX()
>>>> {
>>>>     // This method is invoked on the JavaFX thread
>>>>     Scene scene = getScene();
>>>>     _jfxPanel.setScene(scene);
>>>>         // Add to Swing panel
>>>>     SwingUtilities.invokeLater(new Runnable() { public void run() {
>>>>         _contentPane.add(_jfxPanel);
>>>>         _contentPane.revalidate(); _contentPane.repaint();
>>>>     }});
>>>> }
>>>>


More information about the openjfx-dev mailing list