在所有版本的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