Frage

I am developing a Java Swing-based application with different perspectives. For the "main menu" perspective I do not want the window (JFrame) to be decorated, while in other perspective I do want the window to be decorated. In other words, I need want to change the decoration attribute dynamically.

I have tried to use setUndecorated(false) and setUndecorated(true), but I seems I can only set this once, before actually showing the window.

Is there a way to achieve this?

War es hilfreich?

Lösung

From the javadoc:

Disables or enables decorations for this frame. This method can only be called while the frame is not displayable.

Therefore, once the JFrame is packed and/or displayed, you can no longer change that value. If you want to change the undecorated state of a JFrame you will need to dispose() it first, then change the state and eventually make it visible again.

Andere Tipps

After all, I had to take a different approach. The former solution did work, as I stated in my last comment. However, it was showing the default LAF window decoration, while I was using a different LAF. So the result was graphically inconsistent with the rest of the LAF. Finally, I came with the right solution, I used setUndecorate(true) for my frame. Then, when I had to change my perspective to one using decorations I simply had to use the following code

contentPane.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

And when I had to revert to the non decorate perspective, I use

contentPane.getRootPane().setWindowDecorationStyle(JRootPane.NONE);

This approach didn't need to dispose the window and show it again (which actually produced a brief but still visible hide/show of the window)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top