Textausrichtung in gedrehtem JLabel

smaat

Mitglied
Hallo!

ich habe ein beschriftetes JLabel um -90 gedreht. im gedrehten Label möchte ich den Text aber unten ausrichten, da momentan nicht der gesamte Text angezeigt wird! kann mir jemand helfen??


Java:
RLabel label = new RLabel("text",-90);

Java:
public class RLabel extends JLabel{
	private int rotateAngle = 90;
	public RLabel(String str, int rotate)
	{
	  	  super(str, SwingConstants.LEFT); //Ausrichtung LEFT bringt nichts

		  this.rotateAngle = rotate;
	}

	 public void paintComponent(Graphics g)
	 {
	    Graphics2D g2 = (Graphics2D) g;
	    if(rotateAngle % 90 != 0)
	    {
		      RenderingHints qualityHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		      qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
	    }
	    AffineTransform a = (AffineTransform) g2.getTransform().clone();
	    a.rotate(Math.toRadians(rotateAngle), this.getWidth() / 2, this.getHeight() / 2);
	    g2.setTransform(a);
	    super.paintComponent(g);
	 }
}
 
Hab deinen Code jetzt nicht getestet, aber du solltest zuerst mal den
Code:
super.paintComponent()
-Aufruf in die erste Zeile der paintComponent()-Methode setzen, weil sonst die gemachten Änderungen überschrieben werden.
 
Hab deinen Code jetzt nicht getestet, aber du solltest zuerst mal den super.paintComponent() -Aufruf in die erste Zeile der paintComponent()-Methode setzen, weil sonst die gemachten Änderungen überschrieben werden.

Die super.paintComponent() wird doch am ende aufgerufen, damit das label erst in der gedrehten form dargestellt wird!?

gibt es denn ne andere möglichkeit ein JLabel zu drehen, sodass der gesamte Text im Label angezeigt wird (möglichst nach unten ausgerichtet)?
 
public RLabel(String str, int rotate)
{
super(str, SwingConstants.LEFT); //Ausrichtung LEFT bringt nichts

this.rotateAngle = rotate;
}
Ich dachte du willst Ausrichtung unten nicht links?

PS: Bei so einem Label würde ich dann noch die get/setPreferredSize überschreiben, und dann Höhe und Breite der super Funktion vertauscht zurückgeben.
 
Zuletzt bearbeitet:
Ok, du verstehst anscheinend nicht was die Ausrichtung eines JLabels heisst, die is nämlich standardmäßig immer links. Wenn dein Label aber nicht genug platz hat, wird es abgeschnitten. Normalerweise sind labels breiter als sie hoch sind, wenn du es in der paintComponent Methode drehst, wirds zwar anders gemalt, der Layoutmanager, der für die Ausrichtung zuständig ist weis von deiner Drehung allerdings nix.

Ausserdem:
paintComponent

protected void paintComponent(Graphics g)

Calls the UI delegate's paint method, if the UI delegate is non-null. We pass the delegate a copy of the Graphics object to protect the rest of the paint code from irrevocable changes (for example, Graphics.translate).

If you override this in a subclass you should not make permanent changes to the passed in Graphics. For example, you should not alter the clip Rectangle or modify the transform. If you need to do these operations you may find it easier to create a new Graphics from the passed in Graphics and manipulate it. Further, if you do not invoker super's implementation you must honor the opaque property, that is if this component is opaque, you must completely fill in the background in a non-opaque color. If you do not honor the opaque property you will likely see visual artifacts.

The passed in Graphics object might have a transform other than the identify transform installed on it. In this case, you might get unexpected results if you cumulatively apply another transform.
 
...dann kann man dem LayoutManager sagen, welche bevorzugte Größe das Label hat, in dem man seine PreferredSize errechnet und und mit der getPreferredSize()-Methode zurückgibt.
 

Neue Themen


Zurück
Oben