~Java4Beginners~
~Java4Beginners~

JTextArea

Beim JTextField waren in der Ausgabe auf eine Zeile beschäftigt. Es ist allerdings ab und an auch notwendig, mehrere Zeilen an Ausgaben zu haben, wie z. B. ein Forumseintrag.

Dieses lässt sich mit einer JTextArea gewährleisten.

notwendiger Import


import javax.swing.JTextArea;

Konstruktoren

Die JTextArea bietet uns 6 verschiedene Konstruktoren an, mit unterschiedlichen Parametern. Diese wären
  • Int-Wert rows (Anzahl der Reihen)
  • Int-Wert columns (Anzahl der Spalten)
  • String text (Zeichenkette mit Text)
  • Document doc (Vorgegebenes Textmodell)
Die 6 möglichen Konstruktoren sind dann:
  1. JTextArea()
  2. JTextArea(text)
  3. JTextArea(rows, columns)
  4. JTextArea(text, rows, columns)
  5. JTextArea(doc)
  6. JTextArea(doc, text, rows, columns)

Methoden

Es stehen uns eine Vielzahl von Methoden bei der Arbeit mit JTextArea's zur Verfügung. Hier wie gewohnt ein kleiner Auszug.
Methode Beschreibung
getColumns() Liefert die Anzahl der Spalten.
getLineCount() ermittelt die Anzahl der Zeilen. Achtung: Die Anzahl der Zeilen muss nicht mit den optisch sichtbaren Zeilen übereinstimmen. Ein automatischer Zeilenumbruch zählt nicht als eigene Zeile.
getLineEndOffset(int line) Liefert die Anzahl der Zeichen vom Anfang des Textfeldes bis zum Ende der angegebenen Line.
getLineOfOffsetz(int zeichen) Ermittelt die Zeile mit der angegebenen Anzahl von Zeichen.
getLineStartOffset(int line) Ermittelt die Anzahl der Zeichen vom Anfang des TextAreas bis zum Anfang der angegebenen Line
getLineWrap() Gibt als Rückgabewert true, wenn der automatische Zeilenumbruch aktiviert ist. Ansonsten ist der Rückgabewert false.
getRows() Liefert die Anzahl der Reihen zurück
getTabSize() Gibt an, wieviele Zeichen für einen Tabulator-Sprung verwendet werden.
replaceRange(String str, int start, int end) Ersetzt den in der Range (start bis end) liegenden Text mit dem Text str.
setColumns(int columns) Setzt die angegebene Anzahl von Spalten
setFont (font f) Setzt die angegebene Schriftart
setLineWrap(boolean wrap) true aktiviert den automatischen Zeilenumbruch, während false ihn deaktiviert./td>
setRows(int rows) Setzt die angegebene Zahl von Reihen.
setTabSize(int size) Setzt die Anzahl von Zeichen, die ein Tabulatorsprung überbrückt.
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.

Beispielprogramm


import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.text.BadLocationException;

/**
 * Beispielprogramm JTextArea
 * @author Markus Badzura
 */
public class Bedien_JTextArea extends JFrame
{
    public static void main(String[] args) throws BadLocationException 
    {
        Bedien_JTextArea jta = new Bedien_JTextArea();
        jta.Bedien_JTextArea();
    }
    public void Bedien_JTextArea() throws BadLocationException
    {
        this.setSize(800,500);
        this.setTitle("Beispiel JTextArea");
        this.setLayout(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        String lore = "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. Stet clita kasd "
                + "gubergren, no sea takimata sanctus est Lorem ipsum dolor "
                + "gubergren, no sea takimata sanctus est Lorem ipsum dolor "
                + "sit amet.";
        String lore1= "Lorem ipsum dolor sit amet, consetetur sadipscing elitr"
                + ", sed diam nonumy eirmod tempor\n invidunt ut labore et dolore"
                + " magna aliquyam erat, sed diam voluptua. \nAt vero eos et "
                + "accusam et justo duo dolores et ea rebum. \n\nStet clita "
                + "kasd gubergren, no sea takimata sanctus est Lorem ipsum "
                + "Lorem ipsum dolor sit amet.";
        JPanel panel = new JPanel();
        panel.setSize(this.getSize());
        panel.setLayout(new FlowLayout());
        JTextArea ta1 = new JTextArea(10,20);
        ta1.setBackground(Color.gray);
        JTextArea ta2 = new JTextArea(lore1);
        JTextArea ta3 = new JTextArea();
        ta3.setText(lore);
        ta3.setColumns(20);
        ta3.setRows(5);
        ta3.setLineWrap(true);
        ta3.setBackground(Color.gray);
        JTextArea ta4 = new JTextArea(lore1,10,20);
        panel.add(ta1);
        panel.add(ta2);
        panel.add(ta3);
        panel.add(ta4);
        this.add(panel);
        this.setVisible(true);
    }
}

Auf Änderungen in der JTextArea reagieren

Um zu erkennen, ob Änderungen vorliegen, können wir den Documentlistener verwenden. Dieser kann implementiert werden.

public class frage_gui extends JFrame implements ActionListener, KeyListener, DocumentListener
Im nächsten Schritt fügen wir die JTextArea dem DocumentenListener hinzu.

        ta_vorbemerkung = new JTextArea();
        ta_vorbemerkung.setBounds(10, 10, SCREENSIZE.width-50, 300);
        ta_vorbemerkung.setText(mcsefd.getVorbemerkung());
        ta_vorbemerkung.getDocument().addDocumentListener(this);
Beim DocumentListener müssen wir 3 abstrakte Methoden implementieren.

    /** 
     * Dokumentlistener für Textänderungen
     * Auslösung beim Einfügen
     * @param e Auslösendes Field
     * @author Markus Badzura
     * @since 1.0.004
     */
    @Override
    public void insertUpdate(DocumentEvent e) 
    {
        if (e.getDocument() == ta_vorbemerkung.getDocument())
        {
            vorChangeSave();
        }
    }
    /** 
     * Dokumentlistener für Textänderungen
     * Auslösung bei Löschen
     * @param e Auslösendes Field
     * @author Markus Badzura
     * @since 1.0.004
     */
    @Override
    public void removeUpdate(DocumentEvent e) 
    {
        if (e.getDocument() == ta_vorbemerkung.getDocument())
        {
            vorChangeSave();
        }
    }
    /** 
     * Dokumentlistener für Textänderungen
     * Auslösung bei Einträgen
     * @param e Auslösendes Field
     * @author Markus Badzura
     * @since 1.0.004
     */
    @Override
    public void changedUpdate(DocumentEvent e) 
    {
        if (e.getDocument() == ta_vorbemerkung.getDocument())
        {
            vorChangeSave();
        }
    }

JTextArea scrollbar machen

Wir können zwar mehrere Zeilen in unserer JTextArea verwenden, allerdings verfügt die JTextArea selber nicht über Scrollbars. Damit wir diese erhalten, müssen wir ein bisschen tricksen, in dem wir die JTextArea in eine JScrollPane packen. Hierfür deklarieren wir unser JTextArea, erzeugen eine JScrollPane und weisen der JScrollPane die View auf unser JTextArea-Objekt zu.

  private JScrollPane jsp_right;
  private JTextArea jta_right;
  [. . . . .]
    jta_right = new JTextArea();
    jta_right.setEditable(false);
    jsp_right = new JScrollPane();
    jsp_right.setBounds((this.getWidth()/2)-20,0,this.getWidth()/2,
            this.getHeight());
    jsp_right.setViewportView(jta_right);
nach oben Java4Beginners -- Seitenversion 1.02 -- Stand: 2017-06-23