Hallo,
meine JTextArea wird auf 30 Zeichen pro Zeile begrenzt. Nun möchte ich aber noch dazu, dass die Zeilen auf 8 begrenz werden. Habe in dem PlainDocument mit getLineCount probiert zu sagen "wenn 8 erreicht ist" mach nix mehr. Allerdings kann ich dann auch keine Zeichen mehr in der letzten Zeile eingeben.
Es soll nämlich nicht mehr möglich sein, das sich die JTextArea vergrößert und nach 8 Zeilen soll schluss sein.
Ich hoffe ihr könnt mir hier helfen oder nen tipp geben..!
Hier der Code von der JTextArea
Add im JPanel
meine JTextArea wird auf 30 Zeichen pro Zeile begrenzt. Nun möchte ich aber noch dazu, dass die Zeilen auf 8 begrenz werden. Habe in dem PlainDocument mit getLineCount probiert zu sagen "wenn 8 erreicht ist" mach nix mehr. Allerdings kann ich dann auch keine Zeichen mehr in der letzten Zeile eingeben.
Es soll nämlich nicht mehr möglich sein, das sich die JTextArea vergrößert und nach 8 Zeilen soll schluss sein.
Ich hoffe ihr könnt mir hier helfen oder nen tipp geben..!
Hier der Code von der JTextArea
Java:
package de.viv.view;
import java.awt.Dimension;
public class ArticleDescriptionArea extends JTextArea {
private int maxCharactersPerRow = -1;
private String[] sArrForRows = null;
private int currentLineCount = 0;
public ArticleDescriptionArea(){
super();
init();
}
public void init(){
this.setDocument(new MaxCharacterPerRowDocument());
this.setBorder(BorderFactory.createLoweredBevelBorder());
this.setRows(8);
this.setColumns(25);
this.setLineWrap(true);
this.setWrapStyleWord(true);
this.setTabSize(0);
this.setFont(FontStyle.DEFAULT);
}
/**
* Methode liefert den String für
* die Datenbank
*
* Jede Zeile muss 30 Zeichen beinhalten, um
* der String optimal auf der Kasse anzuzeigen.
* Die Zeichen die bis zur 30 fehlen, werden mit
* Leerzeichen aufgefüllt.
*
*
* @return
*/
public String getStringForDatabase(){
StringBuilder sbForDatabase = new StringBuilder();
int iNumberOfUseChars = 30;
for(String row : sArrForRows){
if(row.length() < maxCharactersPerRow){
sbForDatabase.append(row);
for(int i = sbForDatabase.length(); i < iNumberOfUseChars; i++){
sbForDatabase.append(" ");
}
}else{
sbForDatabase.append(row);
}
iNumberOfUseChars += 30;
}
return sbForDatabase.toString();
}
public int getMaxCharactersPerRow() {
return maxCharactersPerRow;
}
public void setMaxCharactersPerRow(int maxCharactersPerRow) {
this.maxCharactersPerRow = maxCharactersPerRow;
}
/**
* Klasse reagiert Benutzereingaben in der TextArea.
* Sobald 30 Zeichen innerhalb einer Zeile erreicht wurden,
* sind keine weiteren Zeicheneingaben möglich.
*
* @author leifken
*
*/
private class MaxCharacterPerRowDocument extends PlainDocument {
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
System.out.println(getLineCount());
if(getLineCount() < 8){
// erste Zeile
if (maxCharactersPerRow == -1) {
super.insertString(offs, str, a);
return;
}
StringBuilder sb = new StringBuilder(this.getText(0, this.getLength()));
sb.insert(offs, str);
sArrForRows = sb.toString().split("\n");
for(String s : sArrForRows){
if(s.length() > maxCharactersPerRow)
return;
}
super.insertString(offs, str, a);
}
}
}
}
Add im JPanel
Java:
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 5;
gbc.gridheight = 10;
gbc.gridwidth = 1;
gbc.weightx = 5;
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.LINE_START;
descriptionArea = new ArticleDescriptionArea();
descriptionArea.setMaxCharactersPerRow(30);
descriptionArea.setEditable(edit);
this.add(descriptionArea, gbc);