Desenhe um jbutton para parecer um jlabel (ou pelo menos sem a borda do botão?)
Pergunta
Eu tenho um jbutton que, por várias razões, quero agir como um botão, mas pareça um Jlabel. Na verdade, não precisa ser um jlabel sob o capô, eu simplesmente não quero que a borda do botão elevada apareça.
Existe uma maneira fácil de desligar a "aparência do botão" para JButtons, mas manter toda a funcionalidade do botão?
Eu poderia construir algum tipo de hiperbutão de subclasse composto que delegou a um Jlabel para fins de exibição, mas estou realmente esperando que haja algo parecido com button.lookLikeAButton(false)
.
Solução
Você vai querer fazer o seguinte:
setFocusPainted(false);
setMargin(new Insets(0, 0, 0, 0));
setContentAreaFilled(false);
setBorderPainted(false);
setOpaque(false);
Você pode querer excluir setFocusPainted(false)
Se você deseja que ele realmente pinte o foco (por exemplo, a borda da linha pontilhada nas janelas parece).
Eu usei o código acima nos casos em que eu queria um botão "apenas ícone".
Outras dicas
Defina a cor de fundo para transparente e a borda para uma instância vazia.
Por exemplo
JButton button = new JButton();
button.setBackground(null);
button.setOpaque(false);
button.setBorder(new EmptyBorder());
O texto ainda se moverá para cima e para baixo enquanto você clica no botão e o botão ainda pode ser "armado" clicando, segurando e "desarmado" movendo o mouse para fora da área do botão.
Se você não quer esse comportamento, provavelmente não deseja usar um botão e usar uma etiqueta real.
button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?
setContentAreaFilled(false);
setBorderPainted(false);
setOpaque(false);
Essas três linhas fazem o truque.
Pode ser realmente mais fácil adicionar um ouvinte de mouse a um jlabel? Você pode ajustar as cores no mouse pressionado e no mousereleamento, e fazer seu processamento de ação no Mouseclicked?