# JComponent / JLabel drehen (Rotation)



## phouli89 (20. Dez 2011)

Hallo, ich bin auf der Suche nach einer Möglichkeit ein JLabel in einem bestimmten Winkel zu drehen, bisher bin ich jedoch nicht sehr weit gekommen, die Sache scheint sich schwieriger zu gestalten da sich die JComponents anscheinend mit keiner Methode drehen lassen, daher müsste ich wahrscheinlich die paint-methode überschreiben und das JLabel in der Größe anpassen, was leider die Koordinaten verfäscht, diese müsste ich dann neu berechnen.

Meine frage wäre nun ob sich schon mal jemand damit auseinandergesetzt hat und mir vieleicht einen Tipp geben kann.

Das JLabel soll um 360 Grad gedreht werden können, die Rotation sollte sich um die untere linke Ecke drehen.

Ich bin für jeden Vorschlag dankbar.


----------



## Michael... (20. Dez 2011)

phouli89 hat gesagt.:


> Das JLabel soll um 360 Grad gedreht werden können, die Rotation sollte sich um die untere linke Ecke drehen.


Heißt das das JLabel befindet sich dann in einer Komponente mit den Seitenlängen = 2*DiagonaleDesLabels? Oder soll sich die Größe des Containers an den aktuellen Platzbedarf anpassen?
Dann bleibt nichts anderes übrig als zu rechnen.


----------



## phouli89 (20. Dez 2011)

Das Label befindet sich in keinem Container, die Dimension muss sich anpassen, das Label verfügt über einige Grafische optionen, ein Kontextmenu, eine toolbar und ein OptionPanel.

Folgender Link ist der bisher produktivste:
Java: Move JLabel at an angle, rotation, JLabel

Das Hauptproblem besteht darin, dass die Attribute des Feldes als XML exportiert werden, ein PHP-Script liest das Layout. In PHP ist der Nullpunkt des Feldes allerdings die Untere linke Kante des ersten Buchstaben. Die Koordinaten beim Export stellen sich wie folgt zusammen:


```
// Höhe des Labels immer = height
int des = getFontMetrics(getFont()).getDescent();
int height = getFontMetrics(getFont()).getHeight();
int lead = getFontMetrics(getFont()).getLeading();
int fh = height - (des+lead);

// +1 ist die Breite des Rahmens
Point loc = new Point(getX()+1, getY()+fh+1);
```

Problematisch ist das Rotieren des Labels um genau diesen Punkt, damit auch bei unterschiedlichen Winkeln die korrekte Position zurück zu geben. Das bedeutet dass nicht nur die Göße sich anpassen muss sondern auch die Position sich passend zu dem Nullpunkt verschieben muss.


----------

