package at.jta;
import javax.swing.JLabel;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.font.TextLayout;
import java.awt.image.BufferedImage;
import java.awt.geom.Rectangle2D;
import java.awt.Graphics2D;
import java.awt.Color;
import java.awt.geom.AffineTransform;
/**
*
*
Überschrift: Label zeigt den Text horizontal gespiegelt an</p>
*
*
Beschreibung: </p>
*
*
Copyright: Copyright (c) 2006</p>
*
*
Organisation: Taschek Jörg</p>
*
* @author Taschek Jörg
* @version 1.0 Erstversion 6.11.2006
*/
public class MirrorLabel
extends JLabel
{
/**
*
* @param text String
*/
public MirrorLabel(String text)
{
super(text);
}
/**
*
* @param g Graphics
*/
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
TextLayout layout = new TextLayout(this.getText(), this.getFont(), g2.getFontRenderContext());
Rectangle2D bounds = layout.getBounds();
double textImgWidth = bounds.getWidth() + 12;
double textImgHeight = bounds.getHeight() + layout.getDescent() + 4;
BufferedImage textImage = new BufferedImage( (int) textImgWidth, (int) textImgHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2text = textImage.createGraphics();
g2text.setColor(Color.WHITE);
layout.draw(g2text, 6, layout.getAscent());
g2text.dispose();
int textWidth = textImage.getWidth();
int textHeight = textImage.getHeight();
//hier das TextImage erstellen (1 bit nach links ist * 2)
BufferedImage buffer = new BufferedImage(textWidth, textHeight << 1, BufferedImage.TYPE_INT_ARGB);
Graphics2D gg = buffer.createGraphics();
//zuerst normal raufzeichnen
gg.drawImage(textImage, null, null);
//hier Position umsetzen, sodaß 0,0 eigentlich 0, textHeight ist
gg.translate(0, textHeight << 1);
//spiegel transform anlegen
AffineTransform reflectTransform = AffineTransform.getScaleInstance(1.0, -1.0);
//hier das gespiegelte Bild drauflegen
gg.drawImage(textImage, reflectTransform, null);
//hier Position wieder zurücksetzen
gg.translate(0, - (textHeight << 1));
gg.dispose();
int x = 0, y = 0;
if(this.getHorizontalAlignment() == CENTER)
x = (getWidth() - textWidth) / 2;
else if(this.getHorizontalAlignment() == RIGHT)
x = getWidth() - textWidth;
if(this.getVerticalAlignment() == BOTTOM)
y = getHeight() - textHeight << 1;
else if(this.getVerticalAlignment() == CENTER)
y = (getHeight() - textHeight) / 2;
//hier das normale Bild + Spiegelbild in einem auf die gewünschten Koordinaten zeichnen
g.drawImage(buffer,x,y,null);
}
/**
*
* @return Dimension
*/
public Dimension getPreferredSize()
{
Dimension dim = super.getPreferredSize();
dim.height *= 2; //doppelte Höhe zurückgeben
return dim;
}
}