Отвечая на мой собственный вопрос:
Container.add (Component, int) и Container.setComponentZOrder (Component, int) практически идентичны.Первая вызывает removeNotify (), а вторая - нет (по соображениям производительности).
Расслоение контейнера работает только в том случае, если JComponent.isOptimizedDrawingEnabled () возвращает false.Одна из реализаций, которая просто так возвращает ложь, это ... вы уже догадались: JLayeredPane
Использование многоуровневого контейнера не рекомендуется, поскольку оно может иметь неожиданные побочные эффекты .
Наконец, стоит отметить, что хотя Container объявляет add (Component, int) , он фактически не рисует слоистые компоненты должным образом. JComponent и его подклассы делают.
Еще одна интересная находка: никогда не вызывайте repaint () для дочернего элемента JLayeredPane.Это заставит компонент рисовать себя сверху независимо от его z-порядка.Вы должны вызывать repaint () только для самого JLayeredPane.