Динамически показывать и скрывать украшения 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);
При таком подходе не нужно было располагать окно и показывать его снова (что фактически привело к краткому, но все еще видимому скрытию / отображению окна)