在Java6之前的所有版本中,放在JScrollPane中的JTextPane的默认行为是:如果可能,在单词边界处换行。如果没有,那么无论如何都要包装它们。
在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版本中)。
https://stackoverflow.com/questions/8666727
复制相似问题