Введение JLayeredPane в существующий JFrame

Я смотрел на учебники Oracle JLayeredPane, но они изложены таким образом, что это сбивает меня с толку, и я не понимаю, что я пытаюсь сделать.

У меня есть приложение, в котором до сих пор не было концепции слоев. Все размещено в один слой внутри JFrame.

Теперь я хочу представить компонент, который время от времени появляется по мере необходимости в определенном месте, перекрывая существующие компоненты, которые обычно остаются там. Должен ли я модифицировать свое существующее приложение JFrame, чтобы все его содержимое верхнего уровня (то есть компоненты, которые непосредственно добавляются в JFrame) вместо этого добавлялись в JLayeredPane JFrame?

Или что именно?

Я ищу простой способ адаптировать этот графический интерфейс для использования слоев с минимальной переработкой существующего графического интерфейса.

Заранее спасибо за любую помощь здесь.


person Steve Cohen    schedule 16.07.2012    source источник
comment
Вам нужно отображать более одного слоя одновременно. Например, слой частично покрывает слой под ним? Или будет виден только слой верхнего уровня?   -  person Mohayemin    schedule 17.07.2012
comment
Основной слой всегда будет виден. Одна небольшая область основного слоя время от времени будет покрываться событиями из-за пределов потока пользовательского интерфейса. Эта область доступна только для чтения — она никогда не получит фокус клавиатуры и не должна реагировать на события мыши. Весь ввод будет обрабатываться компонентами основного слоя. Событие, основанное на таймере, приведет к его очистке. Другими словами, это что-то вроде всплывающей подсказки, за исключением того, что она вызывается внутренними событиями, а не движением мыши.   -  person Steve Cohen    schedule 17.07.2012


Ответы (1)


Вместо этого вы можете рассмотреть возможность рисования элемента наложения на стеклянной панели. Таким образом, вы можете полностью оставить базовую структуру как есть.

person Roddy of the Frozen Peas    schedule 16.07.2012
comment
Это может сработать, но тогда я потеряю возможность скрыть компонент, переместив его на задний план, не так ли? Я должен сделать его невидимым, не так ли? Есть только несколько компонентов, которые добавляются непосредственно в основную панель содержимого JFrame. Не мог бы я просто добавить их вместо этого в многоуровневую панель? Или это вызовет больше проблем? - person Steve Cohen; 17.07.2012
comment
@SteveCohen - А как насчет многоуровневой панели корневой панели? Если ваш существующий графический интерфейс не указал высоту, все должно быть на уровне DEFAULT_LAYER. Вы можете прикрепить элементы наложения к PALETTE_LAYER. - person Roddy of the Frozen Peas; 17.07.2012
comment
Я с вами, я думаю, но хочу спросить - для чего НУЖЕН слой палитры? И могу ли я использовать Integer(50), чтобы поместить свой компонент на уровень ниже уровня Palette, но выше уровня по умолчанию? В любом случае, вы говорите, что моя стратегия состоит в том, чтобы просто добавить свой компонент в слой палитры на этом уровне, а затем переместить его на задний план, когда я захочу, чтобы он исчез? Или я должен вызвать setVisible(false)? Кстати, этот компонент предназначен только для отображения — пользователь не взаимодействует с ним. Он исчезнет, ​​когда сработает таймер. - person Steve Cohen; 17.07.2012