you have two four options
1) use JLabel + Icon + Html (<= Html 3.2)
2) use XxxButtonUI and override all the necessary methods from the API
3) JLayeredPane with transparency ???, another layout with transparency, like JLabel or JComponent for JButton,
4) there are many graphical SWs that can prepare Background as * .jpg for the icon, then it is very simple to change something according to the event, action or actual setting of JButton
Wrong way looking for JLabel + Whatever it is instead of JButton, I think this is a half-sized solution
source share