Announcement

Collapse
No announcement yet.

Problem mit manuellem Zeilenumbruch unter LineBreakMeasurer

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit manuellem Zeilenumbruch unter LineBreakMeasurer

    Hallo,<BR>
    Ich bin blutiger Java-Neuling (eigentlich überhaupt Programmierungs-Anfängerin) und ärgere mich jetzt als erstes Projekt mit dem Drucken unter Java herum (äusserst undankbar, sage ich... )<BR>
    Jetzt habe ich ein Problem mit dem LineBreakMeasurer (java.awt.font.*), der einen String auf die Seite anpassen soll.
    Das tut er auch, aber ich müsste jetzt auch noch die Möglichkeit beachten, manuelle Zeilenumbrüche in dem String zuzulassen (für Überschriften, Absätze etc.). Hier habe ich bereits versucht, einfach "\n" im String einzufügen, was übergangen wurde. Wenn ich vor dem Einsatz des LineBreakMeasurers den String über einen StringBuffer einlese und den "\n" ersetze durch "(char)13" oder "(char)10", bzw deren Kombinationsmöglichkeiten funzt es auch nicht, was bedeutet, er druckt es nicht, auf der Konsole wird es beim Kontrollausdruck mit System.out.print allerdings richtig ausgegeben. Was kann ich tun?
    <P>
    So habe ich es angegangen:

    <PRE>
    //über einen StringBuffer die "\n" ersetzen durch "(char)10"...
    StringBuffer sb = new StringBuffer();
    for ( i = 0; i < Text.length(); i++)
    {
    char c = charAt(i);
    if ( c == '\n')
    {
    sb.append((char)10);
    sb.append((char)13);
    }
    else
    sb.append(c);
    }</PRE>

    <PRE>
    //LineBreakMeasurer einsetzen
    Point2D.Float pen = new Point2D.Float();
    AttributedCharacterIterator charIterator = mStyledText.getIterator();
    LineBreakMeasurer measurer = new LineBreakMeasurer( charIterator, g2d.getFontRenderContext());
    float wrappingWidth = (float) format.getImageableWidth();
    </PRE>
    <PRE>
    while(measurer.getPosition() < charIterator.getEndIndex())
    {
    TextLayout layout = measurer.nextLayout(wrappingWidth);
    pen.y += layout.getAscent();
    float dx = layout.isLeftToRight() ? 0 : (wrappingWidth - layout.getAdvance());

    layout.draw(g2d, pen.x + dx, pen.y);
    pen.y += layout.getDescent() + layout.getLeading();
    }

    g2d.dispose();
    g2d = null;

    </PRE>

    Vielleicht hat jemand schon mal dieses Problem gehabt...

    Vielen Dank im voraus

    nina
Working...
X