View Full Version : [JAVA]JscrollPane che si autoaggiorna
C'è un modo pulito per far si che quando il componente all'interno del JScrollPane aumenta di dimensioni la scroll bar anzichè stare in alto sita in basso, cioè che invece di venir visualizzata la parte alta del componente venga visualizzata la parte bassa.
In particolare il mio componente è una JTextArea e vorrei che quando inserisco nuove righe, se ce ne sono troppe tanto da esserci la scrollbar, mi venga visualizzata l'ultima riga inserita.
Ora invece compare la scrollbar ma bisogna spostarla a mano per scorrere in giù la textarea.
Non so se mi sn spiegato...
TellaspallaBob
21-09-2006, 22:40
In casi così semplici basta spostare la posizione del cursore alla fine del testo della JTextArea....
class Prova extends JFrame()
{
JTextArea txt = new JTextArea();
public Prova(String testoIniziale)
{
super();
txt.setText(testoIniziale);
JScrollPane scroll = new JScrollPane(txt);
getContentPane(scroll);
}
public void appendTesto(String txtToAppend)
{
txt.append(txtToAppend);
txt.setCaretPosition(txt.getLength());
}
}
si ti ringrazio ero arrivato a questa soluzione anke io :D
redcloud
22-09-2006, 08:21
Ciao, c'ho sbattuto la testa ultimamente su questo problema. Girando su google ho trovato diverse soluzioni, ma più che soluzioni erano tutti trick un po' sporchi.
Tra le sporche, quella più pulita :D mi sembra questa
textArea.setCaretPosition(getDocument().getLength())
mentre quella ufficiale e pulita è questa
((DefaultCaret) textArea.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE)
il problema è che queste due soluzioni non sembrano funzionare in ambiente linux. Io le ho provate solo su windows. Forse il problema è DefaultCaret, magari c'è una classe Caret più specifica che risolve il problema...
TellaspallaBob
22-09-2006, 13:55
Tra le sporche, quella più pulita :D mi sembra questa
textArea.setCaretPosition(getDocument().getLength())
Uhmm non so se l'hai scritta al volo senza stare a controllare, perchè questa di istruzione ha poco effetto....
il getDocument dovresti fartelo dare dal component text
textArea.setCaretPosition(textArea.getDocument().getLength())
Ma textArea.getDocument().getLength() equivale a textArea.getText().getLength()
mentre quella ufficiale e pulita è questa
((DefaultCaret) textArea.getCaret()).setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE)
Questo non fa nulla se non settare le policy di autoUpdate del component.
Hai provato le istruzioni che ti ho messo nel precedente post?
redcloud
22-09-2006, 20:22
Uhmm non so se l'hai scritta al volo senza stare a controllare, perchè questa di istruzione ha poco effetto....
il getDocument dovresti fartelo dare dal component text
textArea.setCaretPosition(textArea.getDocument().getLength())
Ma textArea.getDocument().getLength() equivale a textArea.getText().getLength()
Si l'avevo scritta al volo, sorry :p
Questo non fa nulla se non settare le policy di autoUpdate del component.
Hai provato le istruzioni che ti ho messo nel precedente post?
Si, adottavo la tua soluzione ma per me è troppo sporca e su linux comunque non funziona.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.