How to call setUndecorated() after a frame is made visible?

Lucky picture Lucky · May 17, 2009 · Viewed 45.6k times · Source

In my Swing application, I want the ability to switch between decorated and undecorated without recreating the entire frame. However, the API doesn't let me call setUndecorated() after the frame is made visible.

Even if i call setVisible(false), isDisplayable() still returns true. The API says the only way to make a frame not-displayable is to re-create it. However, I don't want to recreate the frame just to switch off some title bars.

I am making a full-screenable application that can be switched between fullscreen and windowed modes; It should be able to switch while maintaining the state, etc.

How do I do this after a frame is visible?.

Answer

Yishai picture Yishai · May 17, 2009

Have you tried calling Frame.dispose() and then changing it? Haven't tried it myself, but it might work.

If not, then what you can do is have the frame an inconsequential part of the class, with only the most minimal hooks to the highest level panel or panels necessarily, and just move those to the new frame. All the children will follow.