automatischer zeilenumbruch

Status
Nicht offen für weitere Antworten.

redsektor

Neues Mitglied
Hallo,

ich bin gerade ein bisschen am verzweifeln...

und zwar möchte ich in einem JTextArea einen automatischen Zeilenumbruch realisieren. Das funktioniert auch und es wird nach max 64 Zeichen umgebrochen, und es wird auch ein Wort richtig umgebrochen. Jedoch wenn ein paar Zeichen in der darüber liegenden Zeile gelöscht werden, ist das Layout kaputt. Im Prinzip soll es die gleiche Funktionalität haben wie ein Wort Dokument. Hoffe es kann mir jemand helfen.


Code:
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
 * LimitedWidthDocument
 *
 * @version $LastChangedRevision$
 */
public class LimitedWidthDocument2 extends PlainDocument
{
    private static final long serialVersionUID = 1L;
    private static final int MAX_WIDTH = 64;
    private int lines = 1;
    final char[] breakPos = "\n".toCharArray(); //$NON-NLS-1$
    final char[] linePos = "\r".toCharArray(); //$NON-NLS-1$

    @Override
    public void insertString(final int offset, final String str, final AttributeSet a) throws BadLocationException
    {
        final String text = getText(0, getContent().length());

        // get position of last break before insertion point
        int lastBreakPos = 0;
        int currBreakPos = 0;
        while(currBreakPos >= 0 && currBreakPos < offset) {
            lastBreakPos = currBreakPos;
            currBreakPos = text.indexOf("\n", lastBreakPos + 1); //$NON-NLS-1$
        }

        int currLineStartPos = 0;

        // if not the first line
        if(lastBreakPos > 0){
            currLineStartPos = lastBreakPos + 1;
        }

        final int currLineEndPos = text.indexOf("\n", lastBreakPos + 1) + 1; //$NON-NLS-1$
        String currLine = ""; //$NON-NLS-1$
        int offsetInCurrLine = offset;
        if(currLineEndPos > 0) {
            currLine = text.substring(currLineStartPos, currLineEndPos);
            offsetInCurrLine = offset - currLineStartPos;
        }

        final int i = 0, laenge = 0;
        final StringBuffer sb1 = new StringBuffer();

        sb1.append(text.substring(0));

        final String[] result1 = sb1.toString().split("\\s"); //$NON-NLS-1$

        if(offset < text.length()-1){
            final int breakPos = (text.indexOf("\n", (offset/MAX_WIDTH)*MAX_WIDTH)); //$NON-NLS-1$
            final String textNewLine = getText(breakPos, text.length());
            if(text.length() - textNewLine.length() > ((offset/MAX_WIDTH)*MAX_WIDTH)-breakPos){
                super.remove(breakPos, 2);
                super.insertString(breakPos, "\n\r", a);
            }
        }

        //insert brake at the end of a line
        if(currLine.length() > 0 && (currLine.length() + str.length()) > MAX_WIDTH){

            if(!str.equals(" ")){ //$NON-NLS-1$
                //insert a brake before the last word
                if(" ".equals(text.substring(currLineStartPos + MAX_WIDTH -2, currLineStartPos + MAX_WIDTH-1))){ //$NON-NLS-1$
                    super.insertString(offset, str.toUpperCase(), a);
                    super.insertString(currLineStartPos + MAX_WIDTH-1, "\n\r", a); //$NON-NLS-1$
                    lines++;
                }
                else{
                    int x = 0;
                    final StringBuffer sb3 = new StringBuffer();

                    sb3.append(text.substring(currLineStartPos));

                    final String[] result = sb3.toString().split("\\s"); //$NON-NLS-1$

                    while(x < result.length) {
                        x++;
                    }
                    super.insertString(offset, str.toUpperCase(), a);
                    super.insertString(currLineStartPos+MAX_WIDTH-(result[x-1].length()+1), "\n\r", a); //$NON-NLS-1$
                    lines++;
                }
            }
            else{
                // insert the new break without a space
                final int breakInsertionPos = currLineStartPos + (MAX_WIDTH - str.length());

                super.insertString(breakInsertionPos, "\n\r", a); //$NON-NLS-1$
                lines++;

            }

        }
        else{
            // no breaks needed
            super.insertString(offset, str.toUpperCase(), a);
        }

        if(currLine.length() > 0 && (currLine.length() + str.length()) < MAX_WIDTH){

            if(currLineEndPos > 0) {
                currLine = text.substring(currLineStartPos, currLineEndPos);
                offsetInCurrLine = offset - currLineStartPos;
            }
        }
    }
}
[/code]
 

The_S

Top Contributor
Was spricht gegen

JTextArea#setLineWrap

und

JTextArea#setWrapStyleWord

? Oder müssen es genau 64 Zeichen sein?
 

redsektor

Neues Mitglied
Hallo,

was ich vergessen hab, ich muss manuell die \n einfügen, da der String durch nen XML Parser läuft. Und soweit ich weiss, macht Wrap keine \n in den Text sondern passt einfach nur den Text zu der Area an
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Methoden Automatischer login auf einer seite Allgemeine Java-Themen 3
StrikeTom Swing JEditorPane automatischer Umbruch Allgemeine Java-Themen 4
J Automatischer Programmstart Allgemeine Java-Themen 5
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
G automatischer Downcast? Allgemeine Java-Themen 8
S Automatischer Build Allgemeine Java-Themen 2
T Input/Output Zeilenumbruch Allgemeine Java-Themen 4
OnDemand Zeilenumbruch ignorieren möglich? Allgemeine Java-Themen 1
J XML Dokument Zeilenumbruch in den Quellcode einfügen Allgemeine Java-Themen 5
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
J Zeilenumbruch per JAVA_OPTS steuern Allgemeine Java-Themen 1
AssELAss String jeweils nach x Zeichen Zeilenumbruch Allgemeine Java-Themen 1
AssELAss Zeilenumbruch immer nach bestimmtem Zeichen Allgemeine Java-Themen 1
H Zeilenumbruch in Quellcode Allgemeine Java-Themen 4
J Zeilenumbruch - Excel Export HSSF Allgemeine Java-Themen 10
E Zeilenumbruch html Allgemeine Java-Themen 3
E Eclipse automatischen Zeilenumbruch unterbinden Allgemeine Java-Themen 2
K String: alle X Zeichen Zeilenumbruch Allgemeine Java-Themen 3
T Swing JTextAera Zeilenumbruch entfernen Allgemeine Java-Themen 7
C OpenOffice Writer und Zeilenumbruch Allgemeine Java-Themen 4
J Regulärer Ausdruck - Der Punkt und der Zeilenumbruch Allgemeine Java-Themen 6
J Drucken mit drawString() und Zeilenumbruch Allgemeine Java-Themen 3
D JExcelAPI -> Zeilenumbruch? Allgemeine Java-Themen 2
S zeilenumbruch in TextArea Allgemeine Java-Themen 5
C Zeilenumbruch aus JTextArea entfernen Allgemeine Java-Themen 6
B Zeilenumbruch erkennen Allgemeine Java-Themen 22
R zeilenumbruch Allgemeine Java-Themen 2
K Zeilenumbruch in Eclipse beim Codeformater verhindern Allgemeine Java-Themen 10
S Zeilenumbruch nicht von Java interpretieren Allgemeine Java-Themen 5
B String + Zeilenumbruch nach X-Zeichen Allgemeine Java-Themen 4
G Zeilenumbruch beim BufferedWriter? Allgemeine Java-Themen 3
G Javadoc Zeilenumbruch Allgemeine Java-Themen 2
E Zeilenumbruch in einer Textdatei Allgemeine Java-Themen 2
G Zeilenumbruch Allgemeine Java-Themen 15
B Zeilenumbruch bei Schreiben einer Textdatei Allgemeine Java-Themen 10
G JEditorPane Zeilenumbruch Allgemeine Java-Themen 1
N Zeilenumbruch in String nach jeweils x Zeichen einfügen? Allgemeine Java-Themen 6
G Zeilenumbruch in Subview Allgemeine Java-Themen 2
T - Zeilenumbruch entfernen Allgemeine Java-Themen 2
J Zeilenumbruch löschen Allgemeine Java-Themen 10
K Zeilenumbruch String Allgemeine Java-Themen 3
C Zeilenumbruch bei JTextArea Allgemeine Java-Themen 10
G Mit FileWriter Zeilenumbruch schreiben Allgemeine Java-Themen 8
bummerland Zeilenumbruch aus JTextArea Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben