2011-08-23 50 views
7

不像JTextArea,JTextPane沒有選項可以關閉換行。我找到一個solution來關閉JTextPane s中的換行,但對於這樣一個簡單的問題,它似乎過於冗長。有一個更好的方法嗎?JTextPane線包裝

回答

10

參見No Wrap Text Pane。以下是鏈接中包含的代碼。

JTextPane textPane = new JTextPane(); 
JPanel noWrapPanel = new JPanel(new BorderLayout()); 
noWrapPanel.add(textPane); 
JScrollPane scrollPane = new JScrollPane(noWrapPanel); 
+1

在包裹'JTextPane'唯一一個'JPanel'做的是禁用垂直滾動條。 – Jeffrey

+0

@Jeffrey,在XP上使用JDK6_7(和更早的版本)對我來說工作正常。如果它不起作用,我認爲我不會去創建博客條目的所有麻煩。張貼你的SSCCE,展示你如何測試它。 – camickr

+0

發佈圖像的SSCCE。 – Jeffrey

0

No Wrap Text Pane還規定,不需要在JPanel包裹JTextPane的替代解決方案,而不是將其覆蓋getScrollableTracksViewportWidth()。我更喜歡這種解決方案,但它對我來說並不適用 - 我注意到,如果視口比JTextPane的最小寬度更窄,仍會發生包裝。

我發現JEditorPane覆蓋getPreferredSize()嘗試和'固定'的東西,當視口太窄,通過返回最小寬度,而不是首選寬度。這可以通過再次重寫getPreferredSize()說解決「不,真的 - 我們總是希望實際首選大小」:

public class NoWrapJTextPane extends JTextPane { 
    @Override 
    public boolean getScrollableTracksViewportWidth() { 
     // Only track viewport width when the viewport is wider than the preferred width 
     return getUI().getPreferredSize(this).width 
      <= getParent().getSize().width; 
    }; 

    @Override 
    public Dimension getPreferredSize() { 
     // Avoid substituting the minimum width for the preferred width when the viewport is too narrow 
     return getUI().getPreferredSize(this); 
    }; 
}