Bom pessoal, é uma dúvida meio boba, mas não consegui achar resposta ainda. :roll:
Eu crio um botão, deixo ele sem borda, com fundo transparente e insiro uma imagem.
Até ai beleza, mas no primeiro clique que esse botão recebe, aparecem bordas e um fundo, que indicam que ele foi clicado.
Como faço para isso não aparecer?
Achei que isso resolveria:
setFocusable(false);
Só por curiosidade: você precisa realmente deixar o fundo transparente e sem borda? A imagem que você usa é a imagem de um botão?
Sim, é uma imagem de um botão, mas com as bordas arredondadas.
Não haveria necessidade de retirar as bordas e a cor de fundo? :?
É que talvez usar imagens para seus botões não seja a melhor maneira de se fazer.
Imagine ter que criar uma imagem diferente para cada botão que for necessário… Além disso, se você precisar trocar o texto do botão, terá que refazer a imagem. Ou pior, se precisar trocar o modelo dos botões terá que refazer todas as imagens de todos os botões!
Além disso, é possível que os botões fiquem inconsistentes com outros controles (exemplo: botões arredondados e barras de rolagem retangulares).
Em Java há suporte para LookAndFeel (a aparência da aplicação). Quando se usa essa funcionalidade, basta trocar o LookAndFeel do programa e todos os controles (botões, radios, checkboxes, caixas de texto, etc.) ficaram consistentes.
Tutorial de L&F: http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/index.html
Uma lista de alguns L&F famosos: http://geeknizer.com/best-java-swing-look-and-feel-themes-professional-casual-top-10/
LookAndFeel, se não me engano, altera toda a aplicação.
No meu caso, estou fazendo um sistema bem visual, então realmente necessito de fugir ao padrões.
Mas agradeço pelos links, em um outro trabalho vou usar LookAndFeel. 
E voltando, eu realmente precisava usar uma imagem no botão.
A não ser que eu adicionasse essa imagem numa JLabel, mas como eu deveria configurar o MouseListener nesse caso?
Sim, o LookAndFeel altera toda a aplicação.
O problema de usar um JLabel é que ele não recebe eventos como Enter ou o pressionamento da barra de espaço para ativação do evento.
Uma solução possível (não sei se é a mais fácil, mas é a que me vem na mente) é escrever uma classe filha de BasicButtonUI (ou MetalButtonUI) com os métodos paintButtonPressed e paintFocus vazios.
Aí, você faria o seguinte no(s) botão(ões) que você quer desenhar de forma especial:
meuBotao.setUI(new MinhaButtonUI());
É uma possibilidade!
Vou dar uma pesquisada nesse BasicButtonUI… valeu!
Isso foi resolvido com:
setContentAreaFilled(false);