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

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top