vfl_freak
Premium-User
Hallo zusammen,
ich habe mal eine Frage zum setzen der Caretposition in einer JTextArea.
Es ist doch meines Wissens so, dass die Positionen, die ich setzen kann über den gesamten Text fortlaufend numeriert sind und nicht nur Zeilenweise, richtig
Ich habe nun eine JTextArea definiert, in der ich aus DB-technischen Gründen nur 68 Zeichen pro Zeile eingeben darf.
Über einen CaretListener zähle ich mittels 'caretUpdate' die Anzahl der Zeichen :
Über einen KeyAdapter werte ich dann die Position (also nActCol) aus:
Ich muss noch vorausschicken, dass im Textfeld 10 Zeilen Text vorgeblendet werden!
Ich kann nun bspw. die erste Zeile bis auf die 68 Zeichen erweitern. Gebe ich ein 69. Zeichen ein, würde ich erwarten, dass der Zeilenumbruch eingefügt wird und dann der Cursor in dieser neuen Zeile steht
Spannenderweise wird zwar eine neue Zeile in den vorhandenen Text eingefügt, das 69. Zeichen jedoch wird an der ersten Stelle der ersten (also der aktuellen) Zeile eingefügt und auch der Cursor steht dann dahinter.
Erweitere ich wie folgt:
dann wird das 69. Zeichen an der X-ten Stelle der ersten (aktuellen) Zeile eingefügt und der Cursor steht dahinter !
Irgendwie stehe ich hier auf dem Schlauch und raffe es nicht (auch ein Kollege scheint hilflos zu sein
)
Hat irgendwer eine Idee, wo mein Gedankenfehler steckt?
Danke und Gruß
Klaus
[EDIT]: mir gerade noch was eingefallen: in diesem speziellen Programm sind die Cursortasten zum Texteditieren DEAKTIVIERT, da sie hier für einen speziellen Zweck (Telefonsteuerung) missbraucht werden! Kann es damit zusammenhängen?
Ich habe eben noch mal versucht, die gesamte Länge des Textes zu bestimmen und dann das Caret dorthin zu setzen ... das klappt kurioserweise ......
ich habe mal eine Frage zum setzen der Caretposition in einer JTextArea.
Es ist doch meines Wissens so, dass die Positionen, die ich setzen kann über den gesamten Text fortlaufend numeriert sind und nicht nur Zeilenweise, richtig

Ich habe nun eine JTextArea definiert, in der ich aus DB-technischen Gründen nur 68 Zeichen pro Zeile eingeben darf.
Über einen CaretListener zähle ich mittels 'caretUpdate' die Anzahl der Zeichen :
Java:
void jTextAreaKQT_caretUpdate( CaretEvent e )
{
Element root = jTextAreaKQT.getDocument().getDefaultRootElement();
int dot = e.getDot();
int line = root.getElementIndex( dot );
int col = dot - root.getElement( line ).getStartOffset();
nActCol = col;
// nActCol enthält nun stets die aktuelle Position
}
Über einen KeyAdapter werte ich dann die Position (also nActCol) aus:
Java:
public void jTextAreaKQT_keyTyped( KeyEvent e )
{
// ist die max. Anzahl der erlaubten Zeichen erreicht, dann wird ein ENTER eingefügt
if( nActCol >= 68 )
{
Toolkit.getDefaultToolkit().beep();
jTextAreaKQT.insert( "\r\n", nActCol );
jTextAreaKQT.setCaretPosition( nActCol );
jTextAreaKQT.requestFocus();
}
} // jTextAreaKQT_keyTyped
Ich muss noch vorausschicken, dass im Textfeld 10 Zeilen Text vorgeblendet werden!
Ich kann nun bspw. die erste Zeile bis auf die 68 Zeichen erweitern. Gebe ich ein 69. Zeichen ein, würde ich erwarten, dass der Zeilenumbruch eingefügt wird und dann der Cursor in dieser neuen Zeile steht
Spannenderweise wird zwar eine neue Zeile in den vorhandenen Text eingefügt, das 69. Zeichen jedoch wird an der ersten Stelle der ersten (also der aktuellen) Zeile eingefügt und auch der Cursor steht dann dahinter.
Erweitere ich wie folgt:
Java:
jTextAreaKQT.setCaretPosition( nActCol + X);
Irgendwie stehe ich hier auf dem Schlauch und raffe es nicht (auch ein Kollege scheint hilflos zu sein

Hat irgendwer eine Idee, wo mein Gedankenfehler steckt?
Danke und Gruß
Klaus
[EDIT]: mir gerade noch was eingefallen: in diesem speziellen Programm sind die Cursortasten zum Texteditieren DEAKTIVIERT, da sie hier für einen speziellen Zweck (Telefonsteuerung) missbraucht werden! Kann es damit zusammenhängen?
Ich habe eben noch mal versucht, die gesamte Länge des Textes zu bestimmen und dann das Caret dorthin zu setzen ... das klappt kurioserweise ......
Zuletzt bearbeitet: