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