Podes criar uma classe que estende a classe JButton ou JToggleButton e sobrescrever os métodos getImage() e getRover(), assim mais ou menos:
public class Botao extends JButton{
private Icon image;
private Icon rover;
public Botao(String imagePath, String roverPath) {
try {
image = new ImageIcon(ImageIO.read(Thread.currentThread().getClass().getResourceAsStream(imagePath)));
rover = new ImageIcon(ImageIO.read(Thread.currentThread().getClass().getResourceAsStream(roverPath)));
} catch (IOException ex) {
Logger.getLogger(Botao.class.getName()).log(Level.SEVERE, null, ex);
}
}
public Icon getImage() {
return image;
}
public Icon getRover() {
return rover;
}
}
Ai passas como parâmetro duas imagens que criasses, tipo no photoshop ou paint(só para os mais hardcore xD) e ele vai colocar essas imagens nos botões, com isso podes fazer botões mais estilizados...
Obs.: Image é a imagem que vai aparecer no botão, imageRover é a imagem que aparece quando o mouse está sobre o botão
Pra colocar as imagens nos botões é só fazer assim:
Botao botaoImages = new Botao("/images/botao.png", "/images/botaoRover.png"));
meuBotao.setIcon(botaoImages.getImage);
meuBotao.setRolloverIcon(botaoImages.getRover);
O problema de tu não estar conseguindo pelo setBackground, é que o teu lookAndFeel é windows, e não Nimbus, se não gostar dessa solução que eu te dei, sugiro olhar
aqui
Qualquer dúvida é só perguntar.
E se alguém quiser fazer uma crítica do meu código, pode postar aqui, me ajudaria bastante :D