# FontMetrics ohne Graphics-Objekt



## Wildcard (25. Apr 2005)

Hi!

Kann mir jemand sagen was die beste Methode ist an die FontMetrics zu kommen ohne das ich ein Graphics-Objekt brauche? 

```
Toolkit.getDefaultToolkit().getFontMetrics(font);
```
würde zwar funktionieren, ist aber leider deprecated  :?


----------



## Sky (25. Apr 2005)

Erst mal die Frage: Warum hast Du denn kein Graphics-Objekt?


----------



## Wildcard (25. Apr 2005)

Weil ich die Größe von selbst-gezeichneten Labels brauche bevor sie gezeichnet werden.


----------



## Sky (25. Apr 2005)

Liegen deine Lables denn auf einer andern JComponent (bzw. davon abgeleitet)??


----------



## Wildcard (25. Apr 2005)

Liegen auf einer, sind aber keine JComponents. Die übergeordnete JComponent fordert ihre Kinder zum zeichnen auf
und übergibt ihnen ein Graphics-Object. Die FontMetrics brauche ich aber unbedingt vorher, und eine Referenz auf die
View will an dieser Stelle nicht haben...


----------



## Roar (25. Apr 2005)

du kriegst auch über Component#getFontMetrics() ein objekt


----------



## Wildcard (25. Apr 2005)

Roar hat gesagt.:
			
		

> du kriegst auch über Component#getFontMetrics() ein objekt


Hab aber keine Componen  :wink:


----------



## Roar (25. Apr 2005)

vllt. Font#getLineMetrics() ?


----------



## Wildcard (25. Apr 2005)

Roar hat gesagt.:
			
		

> vllt. Font#getLineMetrics() ?


Erstens kann man mit LineMetrics keine Breite ausrechnen, und zweitens bräuchte ich dafür
den FontRenderContext denn ich eben auch nicht habe  :?


----------



## L-ectron-X (25. Apr 2005)

Ist hier vielleicht was für dich dabei?
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Component.html#getFontMetrics(java.awt.Font)
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JComponent.html#getFontMetrics(java.awt.Font)
http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/StyleContext.html#getFontMetrics(java.awt.Font)


----------



## Wildcard (25. Apr 2005)

Alles was aus Component oder JComponent kommt fällt leider aus...
Derzeit benutze ich 
	
	
	
	





```
StyleContext.getDefaultStyleContext().getFontMetrics(RendererConstants.STANDARD_BLUPP_FONT)
```
Das Problem an der Sache ist das der StyleContext im übergeordneten FrameWork gesetzt wird.
Wenn der in Zukunft nicht mit dem default übereinstimmt(und darauf habe ich keinen Einfluss) würde die Größe
falsch berechnet werden. Ich baue sehr ungern Code ein, bei dem mir schon jetzt klar ist, das es später
Probleme geben kann. Da aber anscheinend niemand eine bessere Idee hat, muss ich wohl davon ausgehen
das es für toolkit.getFontMetrics keinen gleichwertigen Ersatz gibt  :?
Falls doch noch jemand ein "Workaround" kennt....


----------



## Sky (26. Apr 2005)

Also, irgendwann musst Du doch mal das ganze Zeichnen, oder? Zu diesem Zeitpunkt durchläuft dein Prog. doch dann die paint-Methode. Da hast Du dann doch ein Graphics-Objekt, welche Du gebrauchen kannst, oder nicht!?


----------



## Wildcard (26. Apr 2005)

Die Klasse die die Eigenschaften des Labels (z.B.  auch die Größe) repräsentiert zeichnet gar nicht und hat auch keine Graphics.
Die berechnung der Größe erfolgt nur beim erstellen des Labels und wenn sich die Beschriftung ändert und wird ansonsten als valid angenommen.
Zum Zeitpunkt des Erstellenes ist das Label aber oft 'weggeklappt', also unsichtbar, und wird deshalb auch nicht 
gezeichnet. Das würde für mich bedeuten ich kann von einem Label das noch nicht gezeichnet wurde auch nicht
sagen wie groß es ist. Das muss ich aber wissen um beim 'aufklappen' des Labels 'platz dafür zu schaffen'.
Die Größe erst jetzt zu berechnen kommt nicht in Frage, da ich nicht darauf warten will das repaint abgearbeitet wird,
und nicht bereit bin das delay von paintImmediately() in kauf zu nehmen.
Deshalb suche ich nach einem gleichwertigen Ersatz für die Methode von Toolkit die es aber wohl nicht gibt   :autsch:


----------



## thE_29 (26. Apr 2005)

Nimm halt einfach die Methode 

Solange du nix besseres findest und sie zZ in 1.5 auch geht, verschwindet die net so schnell


----------

