Dúvida sobre JButton [RESOLVIDO]

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. :wink:

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);