# drawString Befehl nicht ausgeführt nach transforming



## SilentWater01 (10. Okt 2006)

ich komme momentan nicht weiter. Ich möchte einen Text nach einer Linie ausrichten. Dafür habe ich hier im Forum auch einen schönen Beispielcode gefunden.


```
public void paint(Graphics g, Edge egde, int x1, int y1, int x2, int y2) {
		IHierarchicElement element = (IHierarchicElement) egde;
		String streetName = (String) element.getAttributeValue("official_Name.string");
		
		if(!streetName.equals("")){
			
			Graphics2D g2D = (Graphics2D) g;
			
	        g2D.setColor(Color.BLACK);
		
	        // Koordinatensystem drehen
	        AffineTransform alt = g2D.getTransform();
	        AffineTransform neu = new AffineTransform();
	        neu.translate(x1,y1);
	        neu.rotate(Math.atan((1.0 * y2 - y1) / (x2 - x1)));
	        g2D.rotate(Math.atan((1.0 * y2 - y1) / (x2 - x1)));
	        g2D.setTransform(neu);

	        // Text einzeichnen
	        FontMetrics f = g2D.getFontMetrics();
	        g2D.drawString(streetName, 0, 0);

	        
	        // Koordinatensystem zurücksetzen
	        g2D.setTransform(alt); 
		}
	}
```

Nur wird der Text nicht gezeichnet. Na gut, dann versuch ich das halt ohne rotieren und transformieren und habe diese Befehle auskommentiert. Trotzdem wird es nicht gezeichnet. Doch als ich auch die setTransform befehle auskommentiert habe, dann wird der text gezeichnet. Zwar nicht an der Linie ausgerichtet, doch immerhin gezeichnet.

Allerdings sollte ich den text schon anhand der Linien ausrichten. Und es kann ja nicht sein, dass der text nur deswegen nicht gezeichnet wird, weil ich setTransform benutze.

Ich hab auch schon versucht, nach dem drawString Befehl einen dispose() aufruf zu machen, doch der bringt alles durcheinander, der rest sollte schon im normalen koordinatensystem gezeichnet werden.

Kann mir jemand weiterhelfen, warum der text nicht gezeichnet wird, wenn ich mit setTransform arbeite, oder gibt es alternativen den text an einer Linie auszurichten?


----------



## silentwater (10. Okt 2006)

Oh ... Zeile 16 ist zuviel. Die hat sich eingeschlichen da ich verschiedene Sachen getestet habe. Die beschriebenen fehler traten ohne diese Zeile auf


----------



## kaie (11. Okt 2006)

Weiter unten in besagtem Thread gab es damals noch eine Korrektur, die Du anscheinend überlesen hast. Bau das mal ein, vielleicht klappt es ja dann:


```
AffineTransform neu = g2d.getTransform(); 
AffineTransform alt = (AffineTransform)neu.clone();
```

Ist es eigentlich gewollt, dass Du den Text immer an den ersten Knoten linksbündig und nicht zentriert in die Linienmitte schreibst?


----------



## silentwater (11. Okt 2006)

danke, dass habe ich wirklich übersehen.

Das der Text linksbündig ist, war keine Absicht. Ist entsatnden, als ich einfach mit dem Code experimentiert habe. Auf jeden Fall vielen Dank


----------



## Guest (21. Nov 2006)

SilentWater01 hat gesagt.:
			
		

> ich komme momentan nicht weiter. Ich möchte einen Text nach einer Linie ausrichten. Dafür habe ich hier im Forum auch einen schönen Beispielcode gefunden.
> 
> 
> ```
> ...


----------



## SlaterB (21. Nov 2006)

bei mir gehts..


```
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestGUI extends JFrame {
	public TestGUI() throws Exception {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		getContentPane().add(new MyPanel());
		setSize(300, 300);
		setVisible(true);
		
	}

	public static void main(String[] args) throws Exception {
		new TestGUI();

	}

	class MyPanel extends JPanel  {
		public MyPanel() {
			setBackground(Color.YELLOW);
		}
		public void paint(Graphics g) {
			super.paint(g);
			String streetName = "test";

			Graphics2D g2D = (Graphics2D) g;
			g2D.drawString(streetName, 50, 100);
			g2D.setColor(Color.BLACK);
			int x1 = 10;
			int x2 = 50;
			int y1 = 10;
			int y2 = 50;

			// Koordinatensystem drehen
			AffineTransform alt = g2D.getTransform();
			AffineTransform neu = new AffineTransform();
			neu.translate(x1, y1);
			neu.rotate(Math.atan((1.0 * y2 - y1) / (x2 - x1)));
			g2D.rotate(Math.atan((1.0 * y2 - y1) / (x2 - x1)));
			g2D.setTransform(neu);

			// Text einzeichnen
			FontMetrics f = g2D.getFontMetrics();
			g2D.drawString(streetName, 0, 0);

			// Koordinatensystem zurücksetzen
			g2D.setTransform(alt);
		}
	}
}
```


----------

