Originariamente inviato da tulkas85
ma nn funge sta cosa
Tecnicamente il codice che ho postato funziona ..... da solo. Se prima però fai un insert in effetti (ho provato adesso) ci possono essere effetti collaterali.
Una soluzione è portare la posizione del "caret" della text area a 0:
codice:
textArea.setCaretPosition(0);
Anche questo però ha un piccolo effetto collaterale. Se è molto scrollato verso destra, porta sì il caret a 0 ma solo al minimo indispensabile per fare vedere la prima lettera ... non anche il bordo sinistro.
Altra soluzione è portare al minimo il value delle due scrollbar:
codice:
JScrollBar sb = tuoScrollPane.getHorizontalScrollBar();
sb.setValue(sb.getMinimum());
Idem per quella verticale .... cambia solo il primo metodo.
Questo però non ti funziona se lo fai subito dopo la insert(). La questione che forse non sai è che insert() modifica solo lo stato interno nel "model" (il Document), le modifiche a livello "visuale" (redraw del testo, spostamento del caret, aggiustamento delle scrollbar se necessario) vengono fatte solo dopo, quando il controllo è ritornato al framework, cioè sicuramente dopo che la tua gestione dell'evento è terminata!
Ecco perché in certi casi puoi avere degli effetti "collaterali" strani.
Se vuoi usare il setValue sulle scrollbar ad esempio potresti farlo passando un Runnable ad SwingUtilities.invokeLater() in modo che lo esegua ancora più avanti.