我在JScrollPane中使用JTextArea如何限制JTextArea max行和列?
我想限制每行中可能的最大行數和最大字符數。
我需要字符串完全像在屏幕上,每行以'\ n'結尾(如果其後有另一行),用戶將只能在每個行中插入X行和Y字符線。
我試圖限制線條,但我不知道究竟有多少線條,因爲線環繞,線環繞在屏幕上直觀地開始新線條(由於JTextArea的寬度),但在組件的字符串中,實際上是同一行,沒有'\ n'來指示新行。我不知道如何在輸入時限制每行中的最大字符數。
有2個階段:
- 的與字符串的類型保留該用戶將不能夠鍵入更多然後在每行X線和Y字符。 (即使行換行只是可視化或用戶鍵入的'/ n')
- 將字符串插入到DB-在CLiking'OK'之後,即使用戶確實將每行將以「/ n」結尾的字符串沒有輸入它,線只是包裝可視。
如果我將數字字符放在行中並在行尾插入'/ n',那麼幾乎沒有什麼問題,這就是爲什麼我決定在兩個階段做到這一點。在第一階段,用戶正在打字,我寧願只限制它的視覺效果,強行扭曲或類似的東西。只有在我保存字符串的第二階段,我會添加'/ n',即使用戶沒有在行尾輸入它!
有沒有人有想法?
我知道,我將不得不使用的DocumentFilter OR StyledDocument中。
下面是示例代碼,僅限制線,以3:
private JTextArea textArea ;
textArea = new JTextArea(3,19);
textArea .setLineWrap(true);
textArea .setDocument(new LimitedStyledDocument(3));
JScrollPane scrollPane = new JScrollPane(textArea
public class LimitedStyledDocument extends DefaultStyledDocument
/** Field maxCharacters */
int maxLines;
public LimitedStyledDocument(int maxLines) {
maxCharacters = maxLines;
}
public void insertString(int offs, String str, AttributeSet attribute) throws BadLocationException {
Element root = this.getDefaultRootElement();
int lineCount = getLineCount(str);
if (lineCount + root.getElementCount() <= maxLines){
super.insertString(offs, str, attribute);
}
else {
Toolkit.getDefaultToolkit().beep();
}
}
/**
* get Line Count
*
* @param str
* @return the count of '\n' in the String
*/
private int getLineCount(String str){
String tempStr = new String(str);
int index;
int lineCount = 0;
while (tempStr.length() > 0){
index = tempStr.indexOf("\n");
if(index != -1){
lineCount++;
tempStr = tempStr.substring(index+1);
}
else{
break;
}
}
return lineCount;
}
}
沒有答案,但你可能最好使用文件過濾器。 – 2009-01-26 13:49:38