# Label breite ermitteln vor dem rendern?



## bladepit (14. Sep 2011)

Hallo an alle,

ist es irgendwie möglich die Breite eines Label zu ermitteln die es zur Anzeige des Labels braucht?

Also einfach das Label erstellen und dann die Größe abfragen ist es ja nicht da es noch nicht gerendert wurde. Kann man vielleicht das Label als Bild abspeichern und darüber die "verbrauchte" Breite des Labels für den String ermitteln?

Gruß

bladepit


----------



## jgh (14. Sep 2011)

```
label.getPreferredSize()
```
liefert dir doch die bevorzugte/benötigte Größe?!


----------



## bladepit (14. Sep 2011)

Also es geht darum das es dynamische Texte für die Labels gibt. 

Diese werden dann dargestellt und dann wird eine Komponente auf den Anfang also +Höhe des Labels gesetzt.

Aktuell ist das Schätzungweise 60...wenn ich aber meinen Code ausführe mit der PreferedSize kommt 103 raus.

Da ist mein Frame ja noch nicht auf dem Bildschirm wenn ich das abfrage. Hat das was damit zu tun?


----------



## Pepe Rohny (14. Sep 2011)

bladepit hat gesagt.:


> ist es irgendwie möglich die Breite eines Label zu ermitteln die es zur Anzeige des Labels braucht?



ja: 
	
	
	
	





```
String text = "text";
public void addNotify() {
    super.addNotify();
    Graphics graphics = getGraphics();
    Font font = getFont();
    FontMetrics fontMetrics = graphics.getFontMetrics(font);
    int textWidth = fontMetrics.stringWidth(text);
    int textHeight = font.getSize();
}
```

Das funktioniert nur, wenn es bereits gerendert wurde. ABER: es muss nicht sichtbar sein - glaube ich zumindest. Is' schon ein bisschen her das ich mit diesem Problem befasst habe.

Einfacher ist es natürlich mit getPreferredSize() zu arbeiten. Wenn es denn möglich ist ...

Pepe


----------



## Michael... (14. Sep 2011)

bladepit hat gesagt.:


> Diese werden dann dargestellt und dann wird eine Komponente auf den Anfang also +Höhe des Labels gesetzt.


Hinweis: Es gibt LayoutManager, das hört sich nach einem Null Layout an.


bladepit hat gesagt.:


> Aktuell ist das Schätzungweise 60...wenn ich aber meinen Code ausführe mit der PreferedSize kommt 103 raus.
> 
> Da ist mein Frame ja noch nicht auf dem Bildschirm wenn ich das abfrage. Hat das was damit zu tun?


Code?
Falls notwendig kann man auch den notwendigen Platzbedarf eines Strings bestimmen. Die FontMetrics der jeweiligen Komponente liefern die Höhe einer Zeile und können auch die Länge eines Strings berechnen.


----------



## jgh (14. Sep 2011)

wüsste nicht warum man über die FontMetrics gehen sollte.
im folgenden Bsp. werden die benötigten Größen für das JLabel zurückgeben...selbst das das Java-Logo von der Fernuni Hagen gibt exakt die größe des Bildes wieder.


```
JLabel l1 = new JLabel("kleines Label");
		JLabel l2 = new JLabel(
				"<html><font size =7>GROSSES LABEL</font></html>");
		JLabel l3 = new JLabel(
				new ImageIcon(
						new URL(
								"http://www.fernstudium-fernschulen.de/assets/images/Java_logo_klein_01.jpg")));
		JLabel l4 = new JLabel("kleines Label");
		l4.setFont(new Font("Serif", Font.BOLD, 48));
		System.out.println(l1.getPreferredSize());
		System.out.println(l2.getPreferredSize());
		System.out.println(l3.getPreferredSize());
		System.out.println(l4.getPreferredSize());
```

java.awt.Dimension[width=75,height=16]
java.awt.Dimension[width=307,height=47]
java.awt.Dimension[width=380,height=369]
java.awt.Dimension[width=269,height=62]


----------



## Michael... (14. Sep 2011)

jgh hat gesagt.:


> wüsste nicht warum man über die FontMetrics gehen sollte.


Der Meinung bin ich auch, falls das nicht so rüber gekommen ist. Deswegen ja:


Michael... hat gesagt.:


> Code?


;-)


----------



## bladepit (14. Sep 2011)

Oh man...

Hab vergessen das der String noch zu viele Zeichen enthält. Sorry!!!!

Die Lösung mit der PreferredSize funktioniert natürlich!!!


----------

