Implement your own ButtonUI is the best way - extending BasicButtonUI is usually a good start; take a look at the source for it and see what it does. Then you can make it look like what you want, although you can't change the fact that components are always defined by a rectangular bounding box - but you don't have to paint the whole rectangle (eg buttons in many L&Fs have rounded edges).