2011-12-04 80 views
1

如何限制JTextArea行中的字符數,並使其跳到第二個?JTextArea行中的字符限制

+0

我假設你使用Swing和一個JTextArea調用,但在重新閱讀你的問題我可能是錯誤。這是Swing嗎? AWT? Android的?其他? –

+0

問題,你可以設置限制,但是有我的問題 - >,如果你會觸及限制會發生什麼1)任何新的字符將被添加,2)通過從開始刪除,3)通過從最後,有三種選擇,因爲文本可以追加()或插入() – mKorbel

回答

9

如果您使用Swing和一個JTextArea,請嘗試使用setWrapStyleWordsetLineWrap方法:

textarea.setWrapStyleWord(true); 
    textarea.setLineWrap(true); 

您還需要設置JTextArea中的列數:

private static final int TA_ROWS = 20; 
private static final int TA_COLS = 35; 

private JTextArea textarea = new JTextArea(TA_ROWS, TA_COLS); 

並將JTextArea封裝在JScrollPane當然。

編輯
我假設你使用Swing,而且在重新閱讀你的問題,我可能是錯的。這是Swing嗎? AWT? Android的?其他?

+1

這是Swing的。謝謝你的回答,這非常有用。 –

+1

文檔可以做到+1 – mKorbel

1

不知何故,上述解決方案沒有爲我工作。我代替某個DocumentFilter象下面這樣:

public class StockPublicNotesDocumentFilter extends DocumentFilter { 

private final int maxLength; 

public StockPublicNotesDocumentFilter (int maxLength) { 
    this.maxLength = maxLength; 
} 

/** 
    * {@inheritDoc} 
    */ 

public void insertString (DocumentFilter.FilterBypass fb, int offset, String str, AttributeSet attr) 
     throws BadLocationException { 
    if ((fb.getDocument().getLength() + str.length()) <= this.maxLength) 
      super.insertString(fb, offset, str, attr); 
     else 
      Toolkit.getDefaultToolkit().beep(); 
} 

/** 
    * {@inheritDoc} 
    */ 

public void replace (DocumentFilter.FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException { 
    if ((fb.getDocument().getLength() + str.length()) <= this.maxLength) 
      super.replace(fb, offset, length, str, attrs); 
     else 
      Toolkit.getDefaultToolkit().beep(); 

} 
} 

這將作爲

JTextArea comment = componentFactory.generateTextArea(stock.getComment()); 

StockPublicNotesDocumentFilter publicNotesfilter = new StockPublicNotesDocumentFilter(PUBLIC_NOTES_MAX_CHARS); 
     ((PlainDocument) comment.getDocument()).setDocumentFilter(publicNotesfilter);