不知道火龙果有没有研究过 JtextArea 里自动折行的算法,或者给个你自己的思路也成,项目中用到这样的,我自己写的老感觉性能不好。
其他有知道的请不吝指教要求: 有一串字符串,给出一个宽度,然后根据这个宽度自动折行(单词尽可能多的放一起,考虑下当有十万,百万个字符串时,每个都需要折行,对性能的影响,这是关键)
其他有知道的请不吝指教要求: 有一串字符串,给出一个宽度,然后根据这个宽度自动折行(单词尽可能多的放一起,考虑下当有十万,百万个字符串时,每个都需要折行,对性能的影响,这是关键)
msgBox.setLineWrap(true);具体要多少行, 你给JTextArea设定宽度就可以了.
另外, 那个循环的判断条件是个分页算法,没有仔细测, 如果和要求,你自己调调.
package selfimpr.auto;public class AutoLineWrap { private static StringBuilder str = new StringBuilder();
static {
for(int i=0; i<200000; i++) {
str.append("a");
}
}
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int width = 20;
for(int i=1; i<(str.length() + width)/width; i++) {
str.insert(i * width - 1, "\n");
}
long endTime = System.currentTimeMillis();
System.err.println("success in " + (endTime - startTime) + " millis" );
}}
例子一:现在有字符串 "abcdefg abc", 假定给的宽度只够放 "abcdefg ",那么最后的结果应该是|abcdefg |
|abc |例子二:现有一组字符串如下(宽度为 "abcdefg ",注意有空格)
|abcdefg |
|abcdefg |
|abcdefg |
那么,当我的宽度缩减变为 "abcd"时,我需要的结果就变为如下
|abcd|
|efg |
|abcd|
|efg |
|abcd|
|efg |例子三:考虑一个复杂的,现有一组字符串如下(宽度为"abcdefg")
|a abcde|
|a abcde|
|a abcde|
那么,当我的宽度缩减为 "abcde"时,需要的结果如下(保持单词的完整性)|a |
|abcde|
|a |
|abcde|
然后,当宽度缩减为 "abcd"时,需要的结果如下
|a |
|abcd|
|e |
|a |
|abcd|
|e |谢谢大家的关注,额外的,计算这些,可能需要涉及到计算字母,字符串的宽度public int computeCharsWidth(String s, Font f)
{
FontRenderContext frc = new FontRenderContext(f.getTransform(), false, true);
return (int)Math.round(f.getStringBounds(s,frc).getWidth());
}
比如,用过 JTextArea 的朋友会知道,只需要调用它的setLineWrap(true);和setWrapStyleWord(true);那么就可以达到我需要的效果,不过我找了半天没找到它真正实现这个折行的算法
类似的,比如记事本,office word 里都有自动换行的功能
会使用WrappedPlainView或者PlainView
每次更新文本内容,WrappedPlainView都会重新计算分行。
请看LZ研究一下WrappedPlainView.update/breakLines/alculateBreakPosition这些方法吧另外,各位有时间,也请帮我看看我发的问题吧,谢谢了
http://topic.csdn.net/u/20090217/22/258eb255-497a-4e31-96ed-a005a5dc3cf0.html
会使用WrappedPlainView或者PlainView
每次更新文本内容,WrappedPlainView都会重新计算分行。
请看LZ研究一下WrappedPlainView.update/breakLines/alculateBreakPosition这些方法吧 另外,各位有时间,也请帮我看看我发的问题吧,谢谢了
http://topic.csdn.net/u/20090217/22/258eb255-497a-4e31-96ed-a005a5dc3cf0.html