import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
public class MaxCharacterPerRowTextArea extends JTextArea {
private int maxCharactersPerRow = -1;
public MaxCharacterPerRowTextArea() {
super();
init();
}
public MaxCharacterPerRowTextArea(Document doc, String text, int rows,
int columns) {
super(doc, text, rows, columns);
init();
}
public MaxCharacterPerRowTextArea(Document doc) {
super(doc);
init();
}
public MaxCharacterPerRowTextArea(int rows, int columns) {
super(rows, columns);
init();
}
public MaxCharacterPerRowTextArea(String text, int rows, int columns) {
super(text, rows, columns);
init();
}
public MaxCharacterPerRowTextArea(String text) {
super(text);
init();
}
private void init() {
setDocument(new MaxCharacterPerRowDocument());
}
public int getMaxCharactersPerRow() {
return maxCharactersPerRow;
}
public void setMaxCharactersPerRow(int maxCharactersPerRow) {
this.maxCharactersPerRow = maxCharactersPerRow;
}
private class MaxCharacterPerRowDocument extends PlainDocument {
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (maxCharactersPerRow == -1) {
super.insertString(offs, str, a);
return;
}
StringBuffer sb = new StringBuffer(this.getText(0, this.getLength()));
sb.insert(offs, str);
String[] sArr = sb.toString().split("\n");
for(String s : sArr){
if(s.length() > maxCharactersPerRow)
return;
}
super.insertString(offs, str, a);
}
}
public static void main(String[] args) {
JFrame jf = new JFrame("MaxCharsPerRow");
Container cont = jf.getContentPane();
cont.setLayout(new BorderLayout());
JScrollPane scroller = new JScrollPane();
MaxCharacterPerRowTextArea ta = new MaxCharacterPerRowTextArea();
ta.setMaxCharactersPerRow(10);
scroller.getViewport().add(ta);
cont.add(scroller, BorderLayout.CENTER);
jf.pack();
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}
}