# [gelöst] "Größe" von drawString



## googolplex (1. Jul 2007)

Hallo,

wie kann ich herausfinden, wieviel Platz (Höhe, Breite) ein bestimmter mit drawString gezeichneter String einnimmt, eventuell als Rectangle oder so?

Danke, googolplex


----------



## Beni (1. Jul 2007)

Du kannst dir mal die Klasse "FontRenderContext" angucken. Die sollte man aber eigentlich nur benutzen, wenn man sie von einem Graphics2D-Objekt kriegen kann (Graphics2D#getFontRenderContext).

[Edit: damit ein TextLayout erstellen, und dann die Methode "getBounds" benutzen]


----------



## Marco13 (1. Jul 2007)

Spontan würd' ich mir auch mal die Klasse "FontMetrics" ansehen (für den Font, mit dem gemalt wird). Aber mit dem FontRenderContext könnte es auch funktionieren....


----------



## André Uhres (1. Jul 2007)

Manchmal ist "layoutCompoundLabel" auch ganz nützlich:

```
/*
 * TextRectDemo.java
 */
package text;
import java.awt.*;
import javax.swing.*;
public class TextRectDemo extends JFrame {
    private Text text;
    public TextRectDemo() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400,300);
        text = new Text();
        add(text);
    }
    public static void main(final String args[]) {new TextRectDemo().setVisible(true);}
}
class Text extends JPanel{
    private String text = "Hallo Welt";
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D graphics2D = (Graphics2D) g;
        Window window = SwingUtilities.getWindowAncestor(this);
        Rectangle viewRect = window.getBounds();
        Font font = graphics2D.getFont().deriveFont(30f);
        graphics2D.setFont(font);
        Rectangle textRect = new Rectangle();
        text = SwingUtilities.layoutCompoundLabel(this,
                graphics2D.getFontMetrics(), text, null,
                SwingConstants.TOP, SwingConstants.CENTER,
                SwingConstants.CENTER, SwingConstants.CENTER,
                viewRect, new Rectangle(), textRect, 0);
        graphics2D.drawString(text, textRect.x, textRect.y+textRect.height);
        graphics2D.drawRect(textRect.x,    textRect.y,    textRect.width,    textRect.height);
    }
}
```


----------



## googolplex (1. Jul 2007)

Hallo,

danke für die Hilfe.
Ich hab es letztendlich mit FontMetrics gelöst.


```
Graphics2D g2 = (Graphics2D) g;
FontMetrics fm = g2.getFontMetrics();	    
Rectangle2D r = fm.getStringBounds("Der String", g2);
```

Das g kommt aus paintComponent.

Nochmal danke.
googolplex


----------

