Literatur

JTextArea

Mit der Klasse JTextArea werden Eingabefelder erstellt, die im Gegensatz zum JTextField aus mehreren Textzeilen bestehen können.  Als typische Beispiele sind Eingabefelder für Gästebuch-Einträge oder Kommentare auf Webseiten zu nennen.

Neben dem parameterlosen Standardkonstruktor besitzt die Klasse JTextArea fünf weitere Konstruktoren, die wir in folgender Tabelle kurz näher erläutern wollen:

Konstruktor Kurzbeschreibung
JTextArea(int rows, int columns) Dieser Konstruktor erstellt ein JTextArea mit der angegebenen Anzahl an Zeilen und Spalten.
JTextArea(String text) Ein Textfeld wird erstellt, das den über den Parameter "text" angegebenen Text beinhaltet.
JTextArea(String text, int rows,  int columns) Sowohl der Text als auch die Zeilen- und Spaltenanzahl werden hier im Konstruktor für das JTextArea gesetzt.
JTextArea(Document doc) Bei der Erzeugung des Textfeldes wird ein Textmodell vorgegeben.
JTextArea(Document doc, String text, int rows, int columns) Vereint alle obigen Konstruktoren: Es können sowohl das Textmodell, der enthaltene Text, die Anzahl der Zeilen als auch die Anzahl der Spalten vorgegeben werden.

Die Klasse JTextArea besitzt eine Reihe eigener Methoden, von denen wir hier einige vorstellen möchten:

Methode Kurzbeschreibung
void append(String str) Diese Methode fügt an das Ende des bereits vorhandenen Textes den über den Parameter angegebenen Text hinzu.
int getColumns() Gibt die Anzahl der Spalten zurück.
int getLineCount() Liefert die Anzahl der Zeilen zurück.
int getLineEndOffset(int line) Hier wird der Offset (Anzahl an Zeichen) vom Anfang des mehrzeiligen Textfeldes bis zum Ende der angebenen Zeilennummer zurückgegeben.Steuerzeichen wie \n und \t werden hier ebenfalls mitgezählt.
int getLineOfOffset(int offset) Diese Methode ermittelt mit dem übergebenen Offset (Anzahl an Zeichen) die entsprechende Zeilennummer. Steuerzeichen wie \n und \t werden hier ebenfalls mitgezählt.
int getLineStartOffset(int line) Hier wird der Offset (Anzahl an Zeichen) vom Anfang des mehrzeiligen Textfeldes bis zum Anfang der übergebenen Zeilennummer zurückgegeben. Steuerzeichen wie \n und \t werden hier ebenfalls mitgezählt.
boolean getLineWrap() Diese Methode liefert true zurück, wenn am Ende einer Zeile ein automatischer Zeilenumbruch erfolgen soll, ansonsten false.
int getRows() Hier wird die Anzahl der sichtbaren Zeilen zurückgegeben.
int getTabSize() Gibt die Anzahl an Leerzeichen, aus denen die Einrückung mittels Tabulator-Taste besteht, zurück.
boolean getWrapStyleWord() Gibt an, wie der automatische Zeilenumbruch mit Wörtern umgeht, die nicht mehr komplett in die Zeile passen. Wird true zurückgeliefert, wird ein Wort, welches nicht mehr in die Zeile passt, komplett in die nächste Zeile geschoben. Bei false erfolgt der Zeilenumbruch mitten im Wort.
void insert(String str, int pos) Diese Methode fügt den übergeben Text an der entsprechenden Offset-Position ein.
void replaceRange(String str, int start, int end) Diese Methode ersetzt den Text innerhalb des von der Start- und Endposition eingegrenzten Bereiches durch den Text aus dem ersten Parameter.
void setColumns(int columns) Spaltenanzahl wird gesetzt.
void setFont(Font f) Hiermit wird der Zeichensatz für das Textfeld gesetzt.
void setLineWrap(boolean wrap) Mit dieser Methode kann man den automatischen Zeilenumbruch ein- (true) bzw. ausschalten (false).
void setRows(int rows) Hier kann man die Anzahl der sichtbaren Zeilen festlegen.
void setTabSize(int size) Diese Methode legt fest, aus wie vielen Leerzeichen die Einrückung mittels der Tabulator-Taste bestehen soll.
void setWrapStyleWord(boolean word) Diese Methode legt fest, wie der automatische Zeilenumbruch mit Wörtern, die nicht mehr komplett in die Zeile passen, verfahren soll. Wird true übergeben, wird ein Wort, welches nicht mehr in die Zeile passt, komplett in die nächste Zeile geschoben. Bei false erfolgt der Zeilenumbruch mitten im Wort.

Oft ist es sinnvoll ein JTextArea einem JScrollPane hinzuzufügen, damit man den eingegebenen Text auch scrollen kann. Dies ist dann wichtig, wenn die Anzahl der eingegebenen Zeilen die Anzahl der sichtbaren Zeilen übersteigt. Standardmäßig werden, wenn man die GUI-Entwicklungstools der Entwicklungsumgebungen benutzt (z.B. NetBeans) oft die entsprechenden Komponenten automatisch hinzugefügt, so dass man hier evtl. nur einige Einstellungen in den Eigenschaften vornehmen muss.

Nachfolgend ein Beispiel für ein JTextArea in Verbindung mit einem JScrollPane:

 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
 
public class JTextAreaBeispiel {
    public static void main(String[] args) {
        JFrame meinJFrame = new JFrame();
        meinJFrame.setTitle("JTextArea Beispiel");
        meinJFrame.setSize(300, 150);
        JPanel panel = new JPanel();
 
        //5-zeiliges und 20-spaltiges Textfeld wird erzeugt
        JTextArea textfeld = new JTextArea(5, 20);
 
        //Text für das Textfeld wird gesetzt
        textfeld.setText("Lorem ipsum dolor sit amet, " +
        		"consetetur sadipscing elitr, sed diam nonumy " +
        		"eirmod tempor invidunt ut labore et " +
        		"dolore magna aliquyam erat, sed diam voluptua. " +
        		"At vero eos et accusam et justo duo dolores et " +
                        "ea rebum.");
        //Zeilenumbruch wird eingeschaltet
        textfeld.setLineWrap(true);
 
        //Zeilenumbrüche erfolgen nur nach ganzen Wörtern
        textfeld.setWrapStyleWord(true);
 
        //Ein JScrollPane, der das Textfeld beinhaltet, wird erzeugt
        JScrollPane scrollpane = new JScrollPane(textfeld);       
 
        //Scrollpane wird unserem Panel hinzugefügt
        panel.add(scrollpane);
 
        meinJFrame.add(panel);
        meinJFrame.setVisible(true);
 
    }
}
 

Wir haben ein JTextArea mit dem ersten Konstruktor der obigen Konstruktor-Tabelle erzeugt und legen somit über die Parameter die Zeilen- und Spaltenanzahl direkt fest. Anschließend setzen wir den anzuzeigenden Text. Für unser Beispiel verwenden wir dazu den berühmten Platzhalter-Text "Lorem ipsum dolor..". Über die Methode setLineWrap aktivieren wir den Zeilenumbruch, indem wir true übergeben. Auch der Methode setWrapStyleWord übergeben wir true, wodurch wir für das Textfeld festlegen, dass der Zeilenumbruch nur nach ganzen Wörtern erfolgen soll. Damit das JTextArea scrollfähig ist, erzeugen wir ein JScrollPane, dem wir das JTextArea im Konstruktor übergeben.

Das JTextArea sieht dann wie folgt aus: