Khayman Skrevet 13. april 2004 Del Skrevet 13. april 2004 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
Hårek Skrevet 14. april 2004 Del Skrevet 14. april 2004 Du finner tutorials her: http://java.sun.com/docs/books/tutorial/ui.../textfield.html Lenke til kommentar
Frank2004 Skrevet 14. april 2004 Del Skrevet 14. april 2004 (endret) Prøv å flytte cursor til enden av teksten med setCaretPosition(). Endret 14. april 2004 av Frank2004 Lenke til kommentar
Rolf_OLE Skrevet 19. april 2004 Del Skrevet 19. april 2004 setCaretPosition skal i utgangspunket ikke flytte viewet. Tutorialen sier at man skal bruke scrollRectToVisible() men jeg fikk den ikke til å virke. Konverter fra model til view (caret til rektangel) med Rectangle modelToView(int) Lenke til kommentar
Frank2004 Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) 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 24. april 2004 av Frank2004 Lenke til kommentar
Khayman Skrevet 23. april 2004 Forfatter Del Skrevet 23. april 2004 (endret) 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 23. april 2004 av Khayman Lenke til kommentar
Frank2004 Skrevet 24. april 2004 Del Skrevet 24. april 2004 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
Khayman Skrevet 25. april 2004 Forfatter Del Skrevet 25. april 2004 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. Lenke til kommentar
Frank2004 Skrevet 26. april 2004 Del Skrevet 26. april 2004 (endret) 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 26. april 2004 av Frank2004 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå