在所有版本的Java到6中,JTextPane放置在JScrollPane中的默认行为是:如果可能,在单词边界处包装行。如果不是,那就把它们包起来。在JTextPane中包装长单词(Java 7)
在JDK 7中,默认行为似乎是:如果可能,在字边界处换行。如果没有,只需展开JTextPane的宽度(不要包装长单词)。
这是很容易重现此,这里是一个SSCCE:
public class WrappingTest extends JFrame
{
public static void main (String[] args)
{
new WrappingTest();
}
public WrappingTest()
{
setSize(200,200);
getContentPane().setLayout(new BorderLayout());
JTextPane jtp = new JTextPane();
JScrollPane jsp = new JScrollPane(jtp);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
getContentPane().add(jsp,BorderLayout.CENTER);
setVisible(true);
}
}
在JDK 6和JDK 7中,只要运行它,写一些小词,写一个长字,你会看到区别。
我的问题很简单...... JDK 7中的新默认行为完全混淆了我的一个程序(他们应该在Oracle中更加谨慎地改变这种默认设置......它们似乎并不重要,但是当您使用一个JTextPane来显示通常包含很长字符串的数据,它们并不那么重要 - 事实上我要提交一个错误报告,但是我希望在/如果他们不解决问题时有一个解决方法它)。任何方式回到以前的行为?
请注意,我已经检查了相关问题的答案How is word-wrapping implemented in JTextPane, and how do I make it wrap a string without spaces?,但它没有回答这个问题 - 它提供了一种使JTextPane包装完全不考虑空白的方法,但是对于我来说期望的行为是分裂的如果可能的话在空白处加上行,如果不可能的话在其他地方加行(如以前的Java版本)。
是否使用['的invokeLater()'](http://download.oracle.com/javase/tutorial/uiswing/concurrency/ initial.html)的帮助? – 2011-12-29 14:36:52
不......同样的效果。 – 2011-12-29 19:36:41
我有完全相同的问题。相关:https://forums.oracle.com/forums/thread.jspa?threadID=2374090(没有答案...)那里的海报已经创建了一个错误报告,但它被关闭为“没有错误”,没有解释的话...... – PhiLho 2012-05-31 11:21:14