Crear un JButton redondeado y personalizado

Publicado: octubre 5, 2007 en General, Swing
Etiquetas:, , , ,

Hola amigos en esta oportunidad voy a crear un Boton muy perzonalizado y con algunos efectos

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.RenderingHints;
import java.awt.geom.RoundRectangle2D;
import javax.swing.ButtonModel;
import javax.swing.JButton;

/**
 *
 * @author Edisoncor
 */
public class Button extends JButton{

    private Color color1 = new Color(0x666f7f);
    private Color color2 = new Color(0x262d3d);
    private Color color3 = new Color(0x262d3d);

    
    public Button() {
        setOpaque(false);
        setContentAreaFilled(false);
        setForeground(Color.WHITE);
        setFocusPainted(false);
        setBorderPainted(false);
    }

    protected void paintComponent(Graphics g) {
        Color c1,c2,c3;
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        ButtonModel m = getModel();

         Paint oldPaint = g2.getPaint();
        if (m.isArmed()){
           c2=color1.darker();
           c1=color2.darker();
           c3=color3;
        }else{
           c1=color1.darker();
           c2=color2.darker();
           c3=color3.brighter();
        }
        if (!m.isEnabled()){
           c2=color1.brighter();
           c1=color2.brighter();
           c3=color3.darker();
        }
          RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(
                    0,0,getWidth(),getHeight()-1,20,20);
            g2.clip(r2d);
            g2.setPaint(new GradientPaint(0.0f, 0.0f, c1,
                    0.0f, getHeight(), c2));
            g2.fillRect(0,0,getWidth(),getHeight());

            g2.setStroke(new BasicStroke(4f));
            g2.setPaint(new GradientPaint(0.0f, 0.0f, c3,
                    0.0f, getHeight(), c3));
            g2.drawRoundRect(0, 0, getWidth()-2 , getHeight() -2, 18, 18);

        g2.setPaint(oldPaint);
        super.paintComponent(g);
    }

    public Color getColor1() {
        return color1;
    }

    public void setColor1(Color color1) {
        this.color1 = color1;
    }

    public Color getColor2() {
        return color2;
    }

    public void setColor2(Color color2) {
        this.color2 = color2;
    }

    public Color getColor3() {
        return color3;
    }

    public void setColor3(Color color3) {
        this.color3 = color3;
    }

}

y el resultado es
Botones
comentarios
  1. John dice:

    Hola…
    Me parece interesante los ejemplos que muestra y es todo lo que ando buscando, pero la verdad soy muy novato para java y hay cosas que no conosco ni se como aplicarlas, me podrias colaborar con decirme como aplico cada clase que muestras ya que algunas no tienen el
    public static void main(String args[]) {}
    para ejecutarse, como hago para utilizar cada clase….
    Disculpa la novatada …. Pero estoy en pro de un proyecto y me gustaria contar con su colaboracion ….
    Gracias …!!! mi correo jojarial_2@hotmail.com
    jojarial@gmail.com

  2. edisoncor dice:

    Lo unico0 que tienes quye realizar es cargarlos en tu proyecto, y cuando los necesites ltienes que arrastrarlos hacia el formulario en el que estas trabajando, se recomineda que utilices NetBeans

  3. Matias dice:

    Muy buenos tus ejemplos, el gran detalle como el 1 que comento es que no estoy recien en el mundo de java, y tengo que hacer una GUI de trabajo en netBeans, y no se como hacer que esos botones agarren color muuajajajja.

    dando jugo y con oscio opinando aca xD

    = se agradece a gente que trate de aportar cosas como tu
    buena suerte

  4. sammy dice:

    Hola edisoncor … tu codigo es genial … sin embargo, estoy tratando de utilizarlo pero sin que tenga colores, es decir que los colores sean los priopios de java. ya que cuando el boton capture el focusGainer pueda enbiarle un color para que cambie y saber cual tienes el focus en el instante …
    Sera que me podrias colaborar al respecto …

    Le agradesco …

  5. yara isabel dice:

    Hola corazon … gracias por este tutorial se ve genial
    he tratado de realizar una aplicacion utilizando la clase Button en netBeans pero no he podido, por que el initComponet no se deja modificar, como hago para que mis botones se alimenten de la clase Button (La que nos estas mostrando) ademas la declaracion de las variables salen con extension de java.swing.JButton(); y no se deja modificar …

    agradesco que me puedas colaborar …

  6. Edward dice:

    Hola excelente tutorial, quisiera saber si es posible hacer que un boton se adapte a la imagen que le pongo. si fuera posible, podria hacer un tuto?. esperare su respuesta.
    SAludos.

  7. Fernando dice:

    Hola me gustaria creat todo tipos de botones en java dentro de jFrame , gracias

Deja un comentario