2011-08-23 30 views
7

JTextArea'dan farklı olarak, JTextPane satır sarmayı kapatma seçeneği yoktur. Satır sarmayı JTextPane s'ye kapatarak bir solution buldum, ancak bu kadar basit bir sorun için çok ayrıntılı görünüyor. Bunu yapmanın daha iyi bir yolu var mı?JTextPane satır sarma

cevap

10

Bkz. No Wrap Text Pane. İşte bağlantıdan alınan kod.

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

yılında 'JTextPane' sarma tek şey' JPanel' dikey kaydırma devre dışı oldu yaptı. – Jeffrey

+0

@Jeffrey, XP'de JDK6_7 (ve önceki sürümleri) kullanan benim için iyi çalışıyor. Çalışmazsa bir blog girişi yaratmanın tüm sıkıntılarına gideceğimi düşünmüyorum. SSCCE'nizi, nasıl test ettiğinizi gösterir. Görüntülenen – camickr

+0

SSCCE yayınlandı. – Jeffrey

0

No Wrap Text Pane ayrıca JPanel içinde JTextPane sarma gerektirmeyen bir alternatif çözüm sağlar yardımcı olur. Bu çözümü tercih ederim, ama benim için pek işe yaramadı - Görüntüleyici, JTextPane'un minimum genişliğinden daha dar olursa, sarmanın hala devam ettiğini fark ettim.

JEditorPane'un getPreferredSize() numaralı telefonu, tercih edilen genişlik yerine minimum genişliği döndürerek çok dar görüş alanlarını sabitlemeyi denemek ve 'düzeltmek' olduğunu fark ettim. Bunu söylemek tekrar getPreferredSize() geçersiz kılarak çözülebilir 'gerçekten, hayır - biz her zaman gerçek tercih boyutunu istiyorum':

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); 
    }; 
}