Aplicando cores à área transparente de uma imagem JButton - mas não à de seu contêiner

Eu tenho um JButton circular construído usando uma imagem PNG circular com uma área transparente.

Quero preencher a área transparente da imagem do JButton com uma determinada cor - mas algo diferente da cor opaca do JPanel que contém o JButton. Quero fazer isso programaticamente em Java, em vez de fornecer imagens pré-coloridas de um pacote gráfico.

Cheguei ao código abaixo, que simplesmente permite que o plano de fundo laranja do painel opaco colore a área transparente. No entanto, não consigo descobrir como manter o fundo do painel em laranja, mas preencher a transparência da imagem com, digamos, azul (ou outra cor para sobreposição e efeitos pressionados).

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.DefaultButtonModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class App extends JFrame implements ActionListener
{
    public App()
    {
       super();
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setContentPane(makeContentPane());
    }

    private final JPanel makeContentPane()
    {
        JPanel contentPane = new JPanel();
        BufferedImage bi = null;
        try
        {
            bi = ImageIO.read(new URL("http://features.advisorwebsites.com/sites/default/files/users/AdvisorWebsitesFeatures/icones/1384148625_twitter_circle_gray.png"));
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        ImageIcon icon = new ImageIcon(bi);
        MyButton myButton = new MyButton(icon);
        myButton.addActionListener(this);
        contentPane.add(myButton);
        contentPane.setBackground(Color.ORANGE);
        contentPane.setOpaque(true);
        return contentPane;
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                App app = new App();
                app.pack();
                app.setVisible(true);
            }
        });
    }

    class MyButton extends JButton
    {
        public MyButton(ImageIcon icon)
        {
            super(icon);
            setMargin(new Insets(0, 0, 0, 0));
            setFocusable(false);
            setContentAreaFilled(false);
            setBorderPainted(false);
            setModel(new DefaultButtonModel());
            setCursor(new Cursor(Cursor.HAND_CURSOR));
        }
    }

    @Override
    public void actionPerformed(ActionEvent arg0)
    {
        System.out.println("You clicked me");
    }
}

Suponho que talvez seja necessário aplicar as transformações Graphics2D à minha imagem transparente para criar um conjunto de três novas imagens (para os estados normal, rollover e pressionado do meu JButton). Esse é o caminho apropriado a seguir e, se houver, você pode me fornecer um exemplo de código para o bit que está faltando?

obrigado

questionAnswers(2)

yourAnswerToTheQuestion