Gå til innhold

LItt hjelp til JTextArea


Anbefalte innlegg

Sitter å koder litt i Java. Har et JTextField der jeg skriver. Når jeg trykker enter skal jeg ha teksten inn i et JTextArea( typisk IRC).

 

Alt går fint helt til jeg har skrevet ned siden, da kommer det en scrollbar opp, men denne går ikke nedover, slik at jeg ikke kan se det jeg nettopp har skrevet, kun de første linjene.

 

Bruker funksjonen .append fra JTextArea. Har prøvd .setText(), da jeg tok alt som sto i textareaet, la til den nye linjen, og satt dette som ny tekst i textarea. Dette gikk litt treigt når jeg hadde skrevet maaaange linjer. Med setText gikk det fint med scrollingen, noe det ikke gjør med append

 

Noen tips?

Lenke til kommentar
Videoannonse
Annonse
setCaretPosition skal i utgangspunket ikke flytte viewet.

Hmm.. Viewport blir ihvertfall oppdatert her når jeg flytter caret.

____

public static void scrollToBottom(JScrollPane sp) {
   JViewport vp = sp.getViewport();
   int y = (int)(vp.getViewSize()).getHeight();
   y -= (int)(vp.getViewRect()).getHeight();
   y += (vp.getInsets()).bottom;
   vp.setViewPosition( new Point(0, y) );
}

Blir dette en bra måte å gjøre det på?

Endret av Frank2004
Lenke til kommentar

Skulle tro den metoden virket Frank, men nei. Kommer ikke helt ned. Mangler to linjer, de to siste som er skrevet. De ligger rett under vinduet....

 

Det merkelige er at hvis jeg først trykker med musen på JTextArea, og deretter trykker i JTextField, hvor jeg får inputen fra, skriver det jeg vil ha inn, så funker det helt fint med scrolling. Trykker jeg ikke på JTextArea først så scroller den feil.

 

Dette gjelder med og uten metoden til Frank :(

Endret av Khayman
Lenke til kommentar
Skulle tro den metoden virket Frank, men nei. Kommer ikke helt ned. Mangler to linjer, de to siste som er skrevet. De ligger rett under vinduet....

 

Det merkelige er at hvis jeg først trykker med musen på JTextArea, og deretter trykker i JTextField, hvor jeg får inputen fra, skriver det jeg vil ha inn, så funker det helt fint med scrolling. Trykker jeg ikke på JTextArea først så scroller den feil.

 

Dette gjelder med og uten metoden til Frank :(

Hmm.. La til en linje, tror den skulle håndtere tilfeller hvor viewporten er dekorert nå.

 

Men jeg tviler på at det er årsaken til problemene.

 

Når/fra hvor oppdaterer du komponenten din? Er klar over at du kun har lov å gjøre dette i swings event-handler-tråd? Prøv SwingUtilities.invokeLater() eller invokeAndWait() hvis du gjør noe stygt her.

Lenke til kommentar
Du hadde rett i at den ekstra linjen ikke betydde noe. Fatter ikke hva som er galt. Tror jeg får bruke setText istedenfor. Det funker da, selv om det kanskje ikke er så bra når det blir mye tekst i TextArea'en min.

Var visst ikke så vanskelig å reprodusere dette;

 

myTextArea.append("linje1\n");

myTextArea.append("linje2\n");

myTextArea.append("linje3\n");

myTextArea.append("linje4\n");

scrollToBottom(myScrollPane);

 

viser kun linje1 i textarea..

 

Og det at den i det hele tatt viser én linje, kommer vel av at TA'et allerede er stort nok til å få med denne. Avsluttet hver linje med en newline, så det er alltid en tom linje nederst - det som blir gjort her er bare at den putter litt tekst inn i denne..

 

Gjorde dette i event-dispatcher-tråden, som vel skulle være den 'riktige' måten å gjøre det på (om jeg ikke har oversett noe i docs..?)

Fant en workaround, som går ut på å sørge for at scrollToBottom() først kalles når dispatcher-tråden er ferdig, gjennom SwingUtilities.invokeLater(). (Prøvde først å re-/in-/validate() textarea'et før jeg flyttet viewport, men det hjalp ikke stort..)

 

append() metoden skal jo være 'threadsafe', og det er sikkert nettopp derfor det blir problemer..?

Endret av Frank2004
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...