# jTextarea Anzahl Zeichen in einer Zeile begrenzen



## joe89 (6. Mai 2008)

Ich möchte eine jTextarea verwenden, in der der Anwender nur eine begrenzte Anzahl Zeichen in einer Zeile eintragen kann. Dabei soll eine Proportionalschrift verwendet werden.

Hat bereits jemand ein solches Problem bearbeitet oder kann mir Hinweise geben, die mich in dieser Sache etwas weiterbringen.


----------



## Niki (6. Mai 2008)

Sollte genau das sein was du brauchst:

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


----------



## joe89 (7. Mai 2008)

Hallo Niki.

vielen Dank für deine Antwort und den Code. 

joe89


----------

