2012-04-03 10 views
0

Mit Graphics2D möchte ich einen Text in meinem Bild zeigen, aber ich möchte, dass es in einer Zeile angezeigt wird. Das heißt, wenn der Text länger als das Bild ist, wird die Größe reduziert (angepasst)Java Graphics Font - Wie stellt man sicher, dass der Text in einer Zeile gehalten wird?

Wie könnte ich tun?

Bis jetzt, hier ist was ich getan habe, aber ich bin mir sicher, es ist wirklich schlimm.

int fontSize = 66; 
FontRenderContext frc = new FontRenderContext(null, true, true); 
element = null; 

do { // we turn until the size goes into the image 
    fontSize -= 2; 
    layout = new TextLayout(myText, new Font(font, Font.BOLD, fontSize), frc); 
    element = layout.getPixelBounds(null, 0, 0); 

    if (fontSize <= 12) { 
     throw new Exception ("Title too long."); 
    } 
} while(element.width > image.getWidth()); 

Wie kann ich tun?

Danke für Ihre Hilfe.

Antwort

1

Ich musste das gleiche tun, wenn ich Text in einen Kreis für ein bestimmtes Display legte. Das einzige, was Sie vernünftigerweise besser machen können, ist, anstatt Ihre Suche linear zu machen, binär. Dadurch erhalten Sie eine bessere Gesamtleistung. Abgesehen davon ist Ihr Ansatz in Ordnung - ich denke, das ist ungefähr so ​​gut wie Sie können, wenn Sie Text an bestimmte Bildschirmdimensionen in Java anpassen.

Ein paar Coding Semantics Probleme auch - das wäre wahrscheinlich besser lesbar, wenn Sie es in einer regulären While-Schleife getan haben.

Ein weiteres Problem ist die Ausnahme, die Sie werfen. Es wäre wahrscheinlich besser, dies in eine Funktion zu setzen, die einen Wert zurückgibt, der angibt, ob der Text auf einem bestimmten Bild gezeichnet werden kann oder nicht. Es ist nie eine gute Sache, geworfene Ausnahmen zu verwenden, um die Programmlogik zu bestimmen, wenn Sie dasselbe Verhalten bei der Verwendung einer einfachen bedingten Anweisung erhalten.