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?.
Well, you are going to need different frame instance. You may be able to move the contents of your frame over without recreating that. The key here is to make your code not be reliant on a specific frame. This is a basic good practice in any case.
Have a look at https://tvbrowser.svn.sourceforge.net/svnroot/tvbrowser/trunk/tvbrowser/src/tvbrowser/ui/mainframe/MainFrame.java
In Method
switchFullscreenMode()
:Actually there's a lot more stuff going on to hide various sidepanels that reappear if the mouse touches the sides.
Also note that you must explicitly set the bounds.
Window.setExtendedState(MAXIMIZED_BOTH)
interferes badly in timely vicinity of dispose(), because they both rely on multiple native events of the operating system, that are lost, should the window no be displayable at that split second.I don't recommend taking the default screen directly:
and instead use the Screen, your JFrame is currently on:
Though it's currently the same, it might change in the future.
You can't. That's been my experience when I tried to achieve the same.
However if you have your entire UI in one panel which is in your frame, you can create a new frame and add that panel to the frame. Not so much work.
Something like this:
In Swing a panel (and indeed any instance of a component) can only be in one frame at a time, so when you add it to a new frame, it immediately ceases to be in the old frame.
Here is a code in how to make ALT + Enter enters Full Screen without the bar mode and Minimize with showing the Title bar and the Start bar:
Try:
Check it Out. Hope it will help !!
calling
dispose()
releases the native window resources. then you can edit properties like undecorated and so on. then just callsetVisible(true)
to recreate the window resources and everything works fine (the position and all compoenents won`t be changed)