
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.font.LineMetrics;
import java.awt.geom.Rectangle2D;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;
import javax.swing.plaf.LabelUI;
import javax.swing.plaf.basic.BasicLabelUI;

public class NoEllipsisLabelUI extends BasicLabelUI
{
    public static LabelUI labelUI = new NoEllipsisLabelUI();
	
    public NoEllipsisLabelUI()
    {
        super();
    }
    
    protected String layoutCL(JLabel label, FontMetrics fontMetrics, String text, Icon icon, Rectangle viewR, Rectangle iconR, Rectangle textR) 
    {
        super.layoutCL(label, fontMetrics, text, icon, viewR, iconR, textR);
        
        Graphics g = label.getGraphics();
        Rectangle2D r = fontMetrics.getStringBounds(text, g);
        int stringWidth = (int) Math.round(r.getWidth());
        if ((label.getHorizontalAlignment() == SwingConstants.CENTER) && (stringWidth > textR.width))
        {
            int x = (viewR.width / 2) - (stringWidth / 2);
            textR.x = x;
        }
        else if ((label.getHorizontalAlignment() == SwingConstants.RIGHT) && (stringWidth > textR.width))
        {
            int x = viewR.width - stringWidth;
            textR.x = x;
        }
        return text;
    }
    
    public static void main(String[] args) 
    {
        JFrame frame = new JFrame();
        frame.getContentPane().setLayout(new GridLayout(1, 1));
        JLabel label = new JLabel("Esto es una cadena de texto muy grande para caber dentro de un JLabel");
        label.setUI(NoEllipsisLabelUI.labelUI);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setBounds(10, 10, 200, 100);
        frame.getContentPane().add(label);
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.show();
    }
}
