Ho una semplice domanda Java qui. Voglio il testo automatico scorrere fino all'inizio dell'ultima riga di un'area di testo creata usando JTextArea. La quantità di testo per riga dell'area di testo è molto più lunga della larghezza dell'area di testo.Scorrimento automatico del testo per l'area di testo (JTextArea) con la posizione del cursore posizionata all'inizio dell'ultima riga
Ecco lo snippet di codice che ho usato per configurarlo.
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Il problema ora è, con il codice di cui sopra, il comportamento predefinito è che il cursore viene automaticamente posizionato alla fine del documento, di conseguenza, la parte iniziale della zona di testo esce portata . Preferirei che lo scorrimento automatico si verifichi all'inizio dell'ultima riga del documento.
mettere in chiaro, qui ci sono due schermate,
Quello che voglio è il primo, ma quello che sta succedendo è la seconda.
Freddo soluzione! Ma ho una domanda qui. C'è un modo per impostare ta.setCaretPosition (ta.getLineStartOffset (ta.getLineCount() - 1)); solo una volta invece di aggiornarlo ogni volta, in modo che rimanga valido per l'intera applicazione? –
Inoltre, sebbene tu stia utilizzando DefaultCaret caret = (DefaultCaret) ta.getCaret(); caret.setUpdatePolicy (DefaultCaret.ALWAYS_UPDATE); Il tuo codice funzionerebbe anche senza queste dichiarazioni? Qual è la tua opinione in merito? –
@JtheRocker non che io sappia. La posizione del cursore continua a muoversi mentre il testo viene aggiornato. Pertanto, ciò significa che la sua posizione deve essere ricalcolata ogni volta. Probabilmente potresti estendere JTextArea e sovrascrivere setText, prima chiamando super.setText e poi posiziona il cursore. Per quanto riguarda la tua seconda domanda, questa è una questione di comportamento desiderato ed ergonomia. Nella tua domanda è quello che hai chiesto. Ora, se stai effettivamente scorrendo verso l'angolo in basso a sinistra dello schermo, stai cercando qualcos'altro. Se è così, allora considera di postare un'altra domanda su SO. –