[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: Stage hide/show from Swing
From:       Matthias_Hänel <haenel () ultramixer ! com>
Date:       2015-05-26 9:21:43
Message-ID: F0681DF1-D693-4747-B1DB-C835EB97E294 () ultramixer ! com
[Download RAW message or body]

Thanks Kevin, I did it like that :)


Matthias


> Am 19.05.2015 um 16:59 schrieb Kevin Rushforth <kevin.rushforth@oracle.com>:
> 
> Actually, I was saying that you should call Platform.setImplicitExit(false). This \
> is good practice for Swing interop applications, and is absolutely needed in your \
> case. l Note that this is attribute state so you only need to do it once at the \
> beginning of your application. 
> My other point is that you should not use the internal PlatformImpl class at all. \
> It is not supported now, and will stop working in JDK 9. What you should do instead \
> is this: 
> Platform.setImplicitExit(false);
> new JFXPanel();
> Platform.runLater(() -> {
> // your code goes here....
> });
> 
> You don't actually need to do anything with the JFXPanel unless you want to use it \
> to display a JavaFX scene in a Swing component. 
> -- Kevin
> 
> 
> Matthias Hänel wrote:
> > Hey Tom and Kevin,
> > 
> > 
> > thanks for you answers.
> > 
> > 
> > I see setImplicitExit should be avoided but I don't get it working without.
> > 
> > I have now a running version with follwing code:
> > 
> > 
> > public void show()
> > {
> > Platform.setImplicitExit(false);
> > if( invisibleJFXPanel==null )
> > {
> > PlatformImpl.startup(new Runnable()
> > {
> > @Override
> > public void run()
> > {
> > invisibleJFXPanel = new JFXPanel();
> > invisibleJFXPanel.setSize(100,100);
> > invisibleJFXPanel.setVisible(true); // this should be invisible in the future
> > }
> > });
> > }
> > 
> > PlatformImpl.runLater(new Runnable()
> > {
> > @Override
> > public void run()
> > {
> > myStage = new MyStage();
> > myStage();
> > }
> > });
> > }
> > 
> > public void hide()
> > {
> > Platform.setImplicitExit(false);
> > if (myStage != null)
> > {
> > Platform.runLater(new Runnable()
> > {
> > @Override
> > public void run()
> > {
> > myStage.hide();
> > }
> > });
> > }
> > }
> > 
> > 
> > When I understand Kevin correctly, this code should work without any call to \
> > Platform.setImplicitExit(false); Unfortunately, it does not.
> > 
> > 
> > regards
> > Matthias
> > 
> > 
> > 
> > 
> > 
> > > Am 18.05.2015 um 17:24 schrieb Kevin Rushforth <kevin.rushforth@oracle.com>
> > > > 
> > > 
> > > 
> > > You should call Platform.setImplicitExit(false) to disable the default behavior \
> > > where the FX toolkit exits when the last Stage is closed. 
> > > One more suggestion:
> > > 
> > > 
> > > 
> > > > PlatformImpl.startup(new Runnable()
> > > > 
> > > > 
> > > This is not public API and should be avoided. If you are running a Swing \
> > > application and want to startup the FX toolkit, you should create a new \
> > > instance of JFXPanel (even if you don't use it). 
> > > 
> > > -- Kevin
> > > 
> > > 
> > > 
> > > 
> > > Matthias Hänel wrote:
> > > 
> > > 
> > > > Hello there,
> > > > 
> > > > 
> > > > I have a stage that is been called from a Java Swing application. This is not \
> > > > a real problem since I can run follwing code:
> > > > 
> > > > PlatformImpl.startup(new Runnable()
> > > > {
> > > > @Override
> > > > public void run()
> > > > {
> > > > myStage = new myStage();
> > > > myStage.show();
> > > > }
> > > > });
> > > > 
> > > > 
> > > > That works so far. 
> > > > No I would like to close this stage from the swing application. I can call:
> > > > 
> > > > Platform.runLater(new Runnable()
> > > > {
> > > > @Override
> > > > public void run()
> > > > {
> > > > myStage.hide();
> > > > }
> > > > });
> > > > 
> > > > 
> > > > This also works. 
> > > > Since I have a toggle-Button to hide and show the stage from the swing \
> > > > application, I would like to re-show the stage and I would like to know when \
> > > > the stage is showing or not. This seems to be nearly impossible by now. 
> > > > What did I try?
> > > > 
> > > > 1. I tried to shutdown the javafx entire with \
> > > > com.sun.javafx.tk.Toolkit.getToolkit().exit(); in the hide process. So I \
> > > > expected to use PlatformImpl.startup again. Unfortunately, it did not work. 
> > > > 2. I tried to leave javafx untouched. The second time I only call \
> > > > PlatformImpl.runLater to create a new scene. 
> > > > 3. I tried to run it from the swing thread without Platform.run... ... this \
> > > > failed obviuosly. (I just had no further ideas ;))  
> > > > Does anyone tried this before? Any advise will be helpful :)
> > > > 
> > > > 
> > > > 
> > > > Thanks in advance
> > > > Matthias
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > 
> > 
> > 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic