String in Rechteck fester Größe schreiben?

ZAntjeZ

Mitglied
Hallo,

ich male in meinem Programm Rechtecke, die der Benutzer mit einem Label (als String) beschriften kann.
Wie kann ich umgehen, dass wenn der String länger als die Breite des Rechecks ist, der String über den Rand des Rechtecks hinaus geht? Ist es irgendwie möglich, den String abzubrechen, und wie eine Art Zeilenumbruch innerhalb des Rechtecks zuhalten?
Danke für jeden Tip

Tschau
 
Hallo Antje,

Du könntest z.B. die Länge des Strings ermitteln und dann mit der Breite des Rechecks vergleichen, etwa so:
Code:
public final void paint(Graphics g) {
    ...
    String str = "Label XY";
    FontMetrics metrics = g.getFontMetrics();
    int strLength = metrics.stringWidth(str);
    if (strLength > rect.width) {
        ...
    }
    ...
}
Dann kannst Du z.B. eine Methode aufrufen, die einen String in mehrere Strings splitet, anhand von der maximalen Länge (das wäre die Breite des Rechecks).

Gruß
Vincent
 
Hallo,

ich habe mich jetzt mit der Methode split(String,in) rumgeschlagen, um den String abzubrechen, bzw. mit der Methode substring(von, bis) versucht nen Teilstring auszugeben, aber alles fehlgeschlagen. Bei dem substring() bringt er eine mit unverständliche UpperBound Exception, bei der split()-Methode kann er split() nicht auflösen, obwohl ich java.lang.String importiert habe.
Wie muß den die Stringzerlegung aussehen?

Tschau
Antje
 
Mit "aufrufen von einer Methode" meinte ich, eine eigene Methode zu schreiben, die das macht. Sie könnte etwa so aussehen:
Code:
private String[] wrapString(String source, Graphics g, int maxLength) {
    List retList = new ArrayList();
    FontMetrics metrics = g.getFontMetrics();
    char[] chars = source.toCharArray();
    String str = ""; 
    for (int i = 0; i < chars.length; i++) {
        str += chars[i];
        if (metrics.stringWidth(str) >= maxLength) {
            retList.add(str);
            str = "";
        }
    }
    if (str.length() > 0) {
        retList.add(str);
    }
    
    return (String[]) retList.toArray(new String[0]);
}
Allerdings habe ich sie nicht getestet, also musst Du es vielleicht in Deinem Code testen und entsprechend anpassen.

Gruß
Vincent
 
Zurück