Есть ли взлом Swing для запроса или установки Z-порядка окна?

Мы пытаемся сохранить состояние приложения при выходе и восстановить его при запуске. Частью состояния является относительный Z-порядок всех JFrames.

К сожалению, Swing, похоже, не предоставляет никакого метода для изучения или установки Z-порядка окна (даже относительно других окон в той же виртуальной машине).

Мы имеем дело с установкой Z-порядка, вызывая toFront() для всех окон в последовательном порядке. Но запрос Z-порядка остается нерешенным. (Добавление прослушивателей фокуса работает не всегда, например, когда вы используете действие Windows «Каскад» для группы окон.)

Любые идеи?


person sereda    schedule 20.04.2009    source источник
comment
дубликат stackoverflow.com/questions/624885/?   -  person dfa    schedule 20.04.2009
comment
нет, я не про JInternalFrames   -  person sereda    schedule 20.04.2009


Ответы (2)


Без какой-либо детализации.

Как вы говорите, вы можете вызвать toFront() и toBack(), и вы можете попросить окно «оставаться сверху», но это почти все.

Другой вариант - иметь фрейм с внутренними фреймами и использовать setComponentZOrder() (хотя это работает только для внутренних компонентов - вы должны вызывать его в контейнере).

Я считаю, что одной из причин того, что это не было приоритетом в Swing, является то, что поддержка Z-упорядочения в значительной степени зависит от платформы. (Но эй, что не так...)

person Neil Coffey    schedule 20.04.2009

Вы можете использовать setComponentZOrder(Component c, int layer) и getComponentZOrder(Component c) из класса Container. По этому поводу есть технические советы JDC: http://72.5.124.55/developer/JDCTechTips/2005/tt0118.html

person Community    schedule 26.08.2009
comment
просто для будущих зрителей этого потока: этот метод применяется к содержимому JFrame, а не к самому JFrame в контексте других окон в системе. - person Dave Carpeneto; 06.04.2013