Label breite ermitteln vor dem rendern?

bladepit

Bekanntes Mitglied
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
 
Java:
label.getPreferredSize()
liefert dir doch die bevorzugte/benötigte Größe?!
 
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?
 
ist es irgendwie möglich die Breite eines Label zu ermitteln die es zur Anzeige des Labels braucht?

ja:
Java:
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
 
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.
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.
 
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.

Java:
	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]
 
Oh man...

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

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

Neue Themen


Zurück
Oben