I haven't found any listener appropriate for do that, but I think this can work:
As the card layout flips the panel when the user clicks the tab, you can add a MouseListener and in the onclick method you can compare the prevois selected panel with the actual panel (having the previous one in a variable) so if they are different, a new panel has come to the top. You can know that a panel is visible asking the content directly if isVisible()...
hope it helps.