getText bei JTextArea

Schnacki

Mitglied
Hi, ich habe mal eine Frage:
Ich möchte immer den Text aus der letzten Zeile einer JTextArea bekommen.
Wenn ich etwas in die erste Zeile schreibe, funktioniert alles noch, doch wenn ich einen Zeilenumbruch mache, wird die ganze Zeit eine Exception geworfen.

Hier ist der Code:
Code:
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;

public class Konsole extends JFrame implements CaretListener {
	private static final long serialVersionUID = 1L;
	JTextArea t;
	public Konsole() {
		t = new JTextArea();
		t.addCaretListener(this);
			
		getContentPane().add(t);
		setVisible(true);
		
		
	}
	public static void main(String[] args) {
		new Konsole();	
	}
	public void caretUpdate(CaretEvent ev) {
		try {
			String command = t.getText(t.getLineStartOffset(t.getLineCount()-1),t.getLineEndOffset(t.getLineCount()-1));
			System.out.println(command);
		} 
		catch (BadLocationException e) {
			e.printStackTrace();
		}
	}
}
 
Hallo Schnacki,

ich hab deinen code mal etwas abgeändert. Hiermit funktioniert das was du willst.
Ich weiss allerdings nicht warum die funktion LineStartOffset und LineEndOffset so nicht funktioniert. Ich bekomme dort jeweils immer den gleichen wert zurück in der zweiten zeile.

Noch etwas: Du bekommst jetzt erst bei jedem enter-tasten druck die letzt-eingegebene zeile zurück.

Siehe dies mal als eine art work-around. Hab jetzt auch nicht bis ins Detail mich damit beschäftigt.

Gruß,

Torsten

Code:
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.*;
import javax.swing.event.*;

public class Konsole extends JFrame implements CaretListener, WindowListener {
        public void windowActivated(WindowEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("Wieder in Konsole!");
        }
        public void windowClosed(WindowEvent arg0) {
            
        }
        public void windowClosing(WindowEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("Konsole geschlossen");
            System.exit(0);
        }
        public void windowDeactivated(WindowEvent arg0) {
            // TODO Auto-generated method stub
            System.out.println("Konsole gewechselt");
        
        }
        public void windowDeiconified(WindowEvent arg0) {
            // TODO Auto-generated method stub
        
        }
        public void windowIconified(WindowEvent arg0) {
            // TODO Auto-generated method stub
            
        }
        public void windowOpened(WindowEvent arg0) {
            System.out.println("Konsole geöffnet");
        
        }


        private static final long serialVersionUID = 1L;
        JTextArea t;
        int lastLine=0;
        int lineoffset=0;
        public Konsole() {
            t = new JTextArea(30,40);
            t.addCaretListener(this);
            getContentPane().add(t);
            this.addWindowListener(this);
            pack();
            setVisible(true);
            
            
        }
        public static void main(String[] args) {
            new Konsole();    
        }
        
        
        public void caretUpdate(CaretEvent ev) {
            if (lastLine!=t.getLineCount()-1) {
                lastLine=t.getLineCount()-1;
                System.out.println("Row "+lastLine+" Command: "+t.getText().substring(lineoffset));
                lineoffset=t.getText().length();
            }
        }
    }
 
Zurück