在 JTextPane (Java 7) 中包装长字
在截至6的所有Java版本中,JTextPane放在JScrollPane中的默认行为是:如果可能的话,在单词边界处换行。如果没有,那么无论如何都要包装它们。
在 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显示通常包含很长的字母字符串的数据时,它们并不是那么不重要 - 事实上,我将提交一个错误报告,但我希望有一个解决方法,而/如果他们不能解决它)。有什么办法可以回到以前的行为吗?
请注意,我已经检查了相关问题的答案 如何在JTextPane中实现自动换行,以及如何让它换行不带空格的字符串?但它没有回答这个问题 - 它提供了一种使JTextPane换行的方法,而根本不考虑空格,但对我来说,如果可能的话,所需的行为是在空格处拆分行, 如果不可能,则在其他地方(如以前的Java版本)。