【发布时间】:2012-01-29 19:18:36
【问题描述】:
在Java 6 之前的所有版本中,放在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 版本一样)。
【问题讨论】:
-
使用
invokeLater()有帮助吗? -
我也有同样的问题。相关:forums.oracle.com/forums/thread.jspa?threadID=2374090(没有答案......)那里的海报已经创建了一个错误报告,但它被关闭为“不是错误”,没有任何解释......
标签: java swing word-wrap java-7 jtextpane