# Texte in Java2d



## Beathoven (13. Feb 2009)

Hallo zusammen,

Ich kämpfe mich gerade ein wenig durch diese ganzen Java2D Sachen - bis jetzt läufts auch ganz gut:
ich kann Linien malen und Flächen füllen.. sowas halt.

AAABER:

Jetzt will ich einen Text schreiben, jedoch will ich diesen zentrieren.

Bis jetzt gehe ich so vor:


```
Graphics2D g2d = image.createGraphics();
g2d.setColor(Color.BLACK);
Font myFont = new Font("Arial", Font.CENTER_BASELINE, 12);
g2d.setFont(myFont); //Schriftart setzen
g2d.drawString("Mein erster Text", bildbreite / 2, bildhoehe / 2);
```

Ich platziere den ersten Pixel meines Texts also genau in der Mitte (m)eines Bildes.

Damit ist der Text aber linksbündig - iiiiich will aber, dass die Mitte des Texts sich an der Position befindet, die ich angegeben habe.

Also muss es irgendeine Funktion "center" oder sowas geben, oder ich muss den String vorher irgendwie definieren und ausrechnen können, wie groß (lang) er letztlich ist 

Klingt komisch, ist aber so 

Danke schonmal für Eure Hilfe -

LG
Beathoven


----------



## Quaxli (13. Feb 2009)

Eine Zentrierfunktion gibt es nicht -glaube ich (lasse mich gerne korrigeren).
Ausrechnen kannst Du es über FontMetrics, die kriegst Du über getFontMetrics(...) (Methode des Graphics-Objekts) (vgl. API).


----------



## Beathoven (13. Feb 2009)

Kannste mir dafür bitte mal ein Beispiel geben ?
Merci


----------



## Quaxli (13. Feb 2009)

Ich könnte jetzt fragen, wo Dein Problem ist,  aber offensichtlich hast Du nicht mal durch die API geguckt, oder.
Sei's drum, ich bin gerade gutmütig:


```
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;

import javax.swing.*;

public class Test extends JPanel{

	private static final long	serialVersionUID	= 1L;
  String text = new String("Steht eigentlich alles in der API");

	public static void main(String[] args) {
		new Test();
	}
	
	public Test() {
		JFrame frame = new JFrame("demo");
    frame.setLocation(100,100);
	  frame.setSize(300,300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		frame.add(this);
		
		frame.setVisible(true);
	}
	
	public void paintComponent(Graphics g) {
	  super.paintComponent(g);
		g.setColor(Color.RED);
		g.drawString(text,(getWidth()-computeTextSize(g))/2,50);

	}

  private int computeTextSize(Graphics g){
  	int size = 0;
  	
  	FontMetrics fm = g.getFontMetrics();
  	for(int i=0;i<text.length();i++){
  		size += fm.charWidth(text.charAt(i));
  	}
  	System.out.println("size = " + size);
  	
    return size;  	
  }

}
```


----------



## Beathoven (13. Feb 2009)

> ...aber offensichtlich hast Du nicht mal durch die API geguckt...



Bedaure - Du liegst falsch. Ich hab schon in die API geguckt, nur verstanden hab ich es nicht  :lol: 

Aber danke - das es so einfach ist war mir nicht klar


----------

