Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    [Java] JscrollPanel automatico ?

    ciao ho uno jscrollPane che contiene una textArea.

    nella text area scrivo con il metodo insert("stringa",0)
    inserendo sempre in testa.
    Il problema è che quando l'area di testo si riempie devo risalire io ogni volta all'inizio della text area per vedere i nuovi inserimenti...

    come possa fare ?? vorrei che automaticamente lo scrollpane mi posizioni all'inizio della textarea...

    grazie !

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] JscrollPanel automatico ?

    Originariamente inviato da tulkas85
    vorrei che automaticamente lo scrollpane mi posizioni all'inizio della textarea...
    codice:
    tuoScrollPane.getViewport().setViewPosition(new Point());
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    grazie per la rapida risposta , ma nn funge sta cosa, ho anche provato a mettere new Point(1,1)

    in pratica la nuova stringa viene inserita in seguito all'evento di un pulsante.
    quindi prima di uscire dall'action listener ho provato a mettere la tua riga di codice, ovviamente lo scrollpane è variabile di classe quindi visibile anche all'interno dell'action listener

    p.s. se può servire a capire meglio lo jscrollpane è inserito in un panel con borderlayout

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    ok grazie mille.

    ho risolto mettendo alla fine della gestione dell'evento
    setcaretPosition(0)

    non ho scroll bar anche orizzontali, ma solo una verticale quindi nessun problema.

    mi va benissimo anche il fatto che il riposizionamento avvenga in un secondo momento, tanto l'applicazione non ne risente.

    Grande andbin come sempre

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.