Paint layers, from lowest to highest:
- background color
- background painter (swingx and/or core/laf provided)
- foreground (== content painted by laf)
Basically, they are independent of each other and their overall z-order is fixed except for the swingx/core painters: that's an issue to solve for Synth-based LAFs, f.i. Nimbus as a core LAF. The swingx might be on top (as in the 1.6.5-1 regression release) or below the core painter (as in the experimental patch, see JXPanelVisualCheck.customPanelPainter with the ui property "JXPanel.patch" set to Boolean.TRUE)
However the painter layering is done, developers must be aware of the painter issue (read: needs to be heavily documented). Also we might consider to support per-instance configuration of the painter layering.
(note to myself: upload screenshots)