Größe eines rotierten Texts

TimoTH

Mitglied
Hallo zusammen!
In meiner Applikation rotiere ich einen Text und möchte dann die Breite und Höhe dieses Textes erhalten. Die übliche Herangehnsweise mittels Line- und Fontmetrics liefert aber keine korrekten Werte. Hat jemand eine Idee, wie man es stattdessen machen könnte, bzw. mache ich etwas falsch?

LG
Timo


Code:
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;

/*
 * Test.java
 *
 */

public class Test extends JPanel{
    public void paintComponent(Graphics g) {
        raphics2D g2 = (Graphics2D) g;
        AffineTransform at = AffineTransform.getRotateInstance(Math.PI/2);
        Font f = new Font("Arial",Font.PLAIN,9);
        Font rotate = f.deriveFont(at);
        String text = "Hallo";
        g2.setFont(rotate);
        
        
        float height = rotate.getLineMetrics(text,g2.getFontRenderContext()).getHeight();
        int width = g2.getFontMetrics(rotate).stringWidth(text);
        System.out.println("width/height = "+width+"/"+height);
        
        System.out.println("bounds = "+g2.getFontMetrics(rotate).getMaxCharBounds(g2));
        System.out.println("max advance = "+g2.getFontMetrics(rotate).getMaxAdvance());
        
        
        
    }
    public static void main(String[] args){
        JFrame j = new JFrame();
        j.setSize(600,600);
        j.getContentPane().add(new Test());
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        j.setVisible(true);
        
    }
}
Ausgabe =
width/height = 0/0.0
bounds = java.awt.geom.Rectangle2D$Float[x=0.0,y=0.0,w=0.0,h=0.0]
max advance = 0
 
Ok, hat sich schon erledigt... Ich saß da ein wenig auf dem Schlauch. Einfach die Höhe und Breite der ursprünglichen Schriftart mit der Rotationsmatrix verrechnen, dann klappt das auch..

LG
Timo
 
Zurück