I have come to the conclusion HTML enabled JTextPanes do not support word wrapping. So I am attempting to provide a home brew method. I will post it on the 'net once it is complete. I may not have the greatest technique but it should work when it's done. My problem is for some insane (very fustrating) reason when I pass an index to my substring command it switches the actual value with the same value but in negitive and throws a java.lang.StringIndexOutOfBoundsException. But when the variable is sent to the substring comman开发者_运维百科d it is positive for sure. When I substitute the variables for values it works fine. I would appreciate any help. I will include the soure.
String wordWrap( String oldtxt ) {
int ishere = 0; // the current index
int charlen = 0; // The current length of the current line
int beginint = 0; // Where the text between tags begins
int endint = 0; // Where the text between tags ends
String tempstr = ""; // Where the text is
String newoldtxt = ""; // to work around the damned oc error
String newtxt = ""; // The new text being built
String divystr = ""; // Temp variable to hold a partial string
Boolean a = true; // Needed as temp storage variable
newoldtxt = oldtxt;
while( true ) {
endint = oldtxt.indexOf( "<", endint );
if( endint == -1 ) {
endint = oldtxt.length();
a = false;
}
ishere = endint;
tempstr = oldtxt.substring( beginint, endint ); // Save the text in a temp string
while( ishere > endint )
if( tempstr.length() > ( 22 - charlen )) { // Testing for a complete line
// newtxt += tempstr.substring( ishere, 22 - charlen ); // If a line is complete a line is printed to the pane
newtxt += tempstr.substring( ishere, 22 ); // If a line is complete a line is printed to the pane
ishere += 22 - charlen; // Bumping the current index along
charlen = 0;
newtxt += "<br />"; // Attach a line break
if( ishere >= tempstr.length() && a == false )
return newtxt;
} else if( tempstr.length() < ( 22 - charlen) ) { // Checking to see if there are fewer then 22 chars in the string
divystr = tempstr.substring( ishere, tempstr.length() ); // Dump the rest of the substring into the rebuilt string
newtxt += divystr; // Assign the remaining tempstr characters to newtxt
charlen += divystr.length(); // Add stray chars to charlen
if( a == false )
return newtxt;
}
beginint = oldtxt.indexOf( ">", ( endint ) ); // Locate end bracke
newtxt += oldtxt.substring( beginint, endint ); // Add tag to newtxt
}
}
}
When you do the final substring
call, the value of endint
is 0, which is larger than the start index, resulting in a StringIndexOutOfBoundsException.
// endint is larger than beginint here
newtxt += oldtxt.substring( beginint, endint );
精彩评论