Динамически показывать и скрывать украшения JFrame

Я занимаюсь разработкой приложения на основе Java Swing с разных точек зрения. Для перспективы "главного меню" я не хочу, чтобы окно (JFrame) было украшено, в то время как в другой перспективе я хочу, чтобы окно было украшено. Другими словами, мне нужно динамически изменять атрибут оформления.

Я пытался использовать setUndecorated(false) а также setUndecorated(true), но мне кажется, я могу установить это только один раз, прежде чем отобразить окно.

Есть ли способ добиться этого?

2 ответа

Решение

Из Javadoc:

Отключает или включает украшения для этого кадра. Этот метод может быть вызван только тогда, когда кадр не отображается.

Поэтому, как только JFrame упакован и / или отображается, вы больше не можете изменить это значение. Если вы хотите изменить undecorated состояние JFrame вам нужно будет dispose() сначала измените его, а затем снова сделайте видимым.

В конце концов, мне пришлось использовать другой подход. Первое решение сработало, как я уже говорил в своем последнем комментарии. Тем не менее, он показывал оформление окна LAF по умолчанию, в то время как я использовал другой LAF. Таким образом, результат был графически несовместим с остальными членами LAF. Наконец, я пришел с правильным решением, я использовал setUndecorate(true) для моего кадра. Затем, когда мне пришлось изменить свою перспективу на одну с использованием украшений, мне просто пришлось использовать следующий код

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

И когда мне пришлось вернуться к перспективе без декорации, я использую

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

При таком подходе не нужно было располагать окно и показывать его снова (что фактически привело к краткому, но все еще видимому скрытию / отображению окна)

Другие вопросы по тегам