Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Componentes / Java / JLabel circular

JLabel circular

Autor jc mouse domingo, octubre 12, 2014

En este post crearemos un swing Label personalizado que tendrá la forma circular en su borde, con esto obtendremos un bonito efecto circular elegante y que se sale de lo común del JLabel tradicional rectangular.

IDE: Netbeans 7.x

Nivel: Intermedio

Tiempo: 15 minutos

1. Crea un nuevo proyecto Java Class Library y llamado “Circle Label”, dale la siguiente estructura:

circle label proyecto

2. Para darle la forma circular al JLabel, lo que haremos sera crear nuestro propio Border que se extenderá de AbstractBorder, entonces sobreescribiremos el método paintBorder para pintar gracias a java2d una figura Ellipse2D, para rellenar las partes fuera de la forma circular, se usara el color del componente padre.

Abre la clase CircleBorder y pega el siguiente código:

package com.bolivia.label;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import javax.swing.border.AbstractBorder;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class CircleBorder extends AbstractBorder{

    private Color color;
    private BasicStroke stroke = null;
    private RenderingHints hints;

    /** Constructor*/
    CircleBorder() {        
        color = Color.BLACK;//negro
        stroke = new BasicStroke(1);//grosor del borde
        hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    }

    /** Constructor 
 * @param Color color color de borde
 * @param int value grosor del borde
 */
    CircleBorder( Color color, int value) {        
        this.color = color;
        stroke = new BasicStroke(value);     
        hints = new RenderingHints(
                RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
    }        

    @Override
    public void paintBorder(Component c,Graphics g,int x, int y, int width, int height) {

        Graphics2D g2 = (Graphics2D) g;
        Ellipse2D circle2D = new Ellipse2D.Double();//java2d

        //si el ancho de linea del borde es igual a cero
        if( stroke.getLineWidth()==0 )
        {
            //dibuja el circulo en toda su extensión
            circle2D.setFrameFromCenter( 
                    new Point(x+width/2,y+height/2), //centro 
                    new Point( width , height) //ancho y alto
                    );            
        }
        else
        {
            //pinta el circulo pero restando el grosor del borde
            circle2D.setFrameFromCenter( 
                    new Point(x+width/2,y+height/2), 
                    new Point( width-(int)stroke.getLineWidth() , height-(int) stroke.getLineWidth())
                    );            
        }                

        Polygon pointer = new Polygon();
        Area area = new Area(circle2D);        
        area.add(new Area(pointer));
        g2.setRenderingHints(hints);

        //pinta el fondo con el color del componente padre 
        Component parent  = c.getParent();
        if (parent!=null) {
            Color bg = parent.getBackground();
            Rectangle rect = new Rectangle(0,0,width, height);
            Area borderRegion = new Area(rect);
            borderRegion.subtract(area);
            g2.setClip(borderRegion);
            g2.setColor(bg);
            g2.fillRect(0, 0, width, height);
            g2.setClip(null);
        }                 

        if( stroke.getLineWidth()>0 )
        {
            g2.setColor(color);
            g2.setStroke(stroke);            
        }        

        g2.draw(area);
    }

}

3.  La clase CircleBorder creada en el paso 2, debemos implementarla en nuestro Label CLabel.java de la siguiente manera:

package com.bolivia.label;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JLabel;
import static javax.swing.SwingConstants.CENTER;
import javax.swing.border.AbstractBorder;
/**
 * @web htpp://www.jc-mouse.net
 * @author Mouse
 */
public class CLabel extends JLabel {

   private AbstractBorder circleBorder = new CircleBorder();       
   private int lineBorder=1; 
   private Color lineColor= Color.BLACK;

    /** Constructor */
     public CLabel()
     {
        Dimension d = new Dimension(100,100);
        setSize(d);
        setPreferredSize(d);       
        setText("CLabel");
        setOpaque(true);
        setHorizontalAlignment(CENTER);       
        setVisible(true);       
        setBorder(circleBorder); 
     }

    //Color de borde
    public Color getLineColor() {
        return lineColor;
    }

    public void setLineColor(Color color) {
        circleBorder = new CircleBorder(color, lineBorder);
        lineColor = color;
        setBorder(circleBorder); 
    }

    //Grosor de borde
    public int getLineBorder() {
        return lineBorder;        
    }

    public void setLineBorder(int lineBorder) {
        circleBorder = new CircleBorder(lineColor, lineBorder);
        this.lineBorder = lineBorder;        
        setBorder(circleBorder); 
    }
}

También declaramos los métodos Get/Set para LineColor de tipo Color (Color de linea del borde) y LineBorder de tipo entero (Grosor de borde), estos métodos son los que se verán en la ventana de propiedades y nos permiten cambiar el color y grosor del borde desde código

properties swing

4. Para terminar, clic derecho sobre el proyecto y CLEAN AND BUILD (Limpiar y Construir) para crear el *.JAR

Circle Label swing

DESCARGAS

Proyecto Label Circular

Liberia Circle_label.jar

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Yachaywasi – Crea exámenes tipo test para android

Yachaywasi – Crea exámenes tipo test para android

Yachaywasi versión 3.1 es una aplicación para android que te permite crear, editar y realizar exámenes tipo test cómodam...

Envio de correo gmail con PHPMailer

Envio de correo gmail con PHPMailer

En este tutorial utilizaremos la librería PHPMailer para enviar correo electrónico utilizando el servidor de GMail de Go...

SQLite/Java conexión

SQLite/Java conexión

SQLite. SQLite es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente...

Texto e Imagen en Java2d (Proyecto)

Texto e Imagen en Java2d (Proyecto)

Nivel: Intermedio-Avanzado IDE: Netbeans 6.9 o Sup. Tiempo: 30 minutos En este tutorial crearemos una aplicación que nos...

Puzzle en Visual Basic [Código Fuente]

Puzzle en Visual Basic [Código Fuente]

Rompecabezas 3×3 realizado en Visual Basic .NET, lo que se hizo fue una migración de un proyecto hecho en java (pue...

Contraseñas con emojis en java

Contraseñas con emojis en java

Semanas atrás leí un articulo en el que se pensaba implementar los emojis como contraseñas en los dispositivos con andro...

1 comentario en “JLabel circular”

  1. Pingback: jesse

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Comparte lo que sabes

Categorias

Últimas entradas

Si quieres cambiar el nombre de tus atributos sin tener que reescribir código java por X o Y razón, GSON te permite reno...

Un JList nos permite almacenar objetos en una lista y mostrarlos gráficamente en una serie vertical en el cual el usuari...

El proyecto “Java Decompiler” tiene como objetivo desarrollar herramientas para descompilar y analizar byte...

En este post aprenderemos lo que es un JSON Web Token, como crear nuestro propio token de acceso y como usarlo en un Ser...

Android Bolivia

Bandera en Alto