Edisoncor’s Weblog

Programación en Java desde LOJA

Crear un JButton redondeado y personalizado

Publicado por edisoncor en Octubre 5, 2007

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

5 comentarios para “Crear un JButton redondeado y personalizado”

  1. John escribió

    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 escribió

    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 escribió

    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 escribió

    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 escribió

    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 …

Escribe un comentario

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>