Sorry Leute, aber es sind 2 fragen die ganz schnell gehen, ist n bissl unnötig 2 threads aufzumachen.
also nummer 1:
wenn man in einer paintComponenet Graphics#drawString aufruft und x=0, y=0 übergibt landet der text ja nicht oben links in der ecke, sondern dadrüber. ich muss immer rumraten mit y, bis es passt, vor allem bei variablen schriftgrößen… wo genau wird der string gezeichnet? lässt sich da was mit den StringBounds berechnen?
nummer 2:
Ich wollte das eine jscrollpane mit jtextarea vertical mitscrollt, wenn bei der textarea neuer inhalt unten dran kommt.
dazu hab ich ganz einfach mit einem einzeiler (scrollbar = scrollpane.getVerticalScrollBar()) scrollbar.setValue(scrollbar.getMaximum()) geschrieben. Machnmal landet der balken dann aber nicht ganz unten, sondern ein paar (geschätzte 5 - 10) pixel da drüber. Wie kann das sein, bzw was übersehe ich?
Bild von 2, nachaufruf des runter scrolls - einzeilers:
wenn man in einer paintComponenet Graphics#drawString aufruft und x=0, y=0 übergibt landet der text ja nicht oben links in der ecke, sondern dadrüber.
Du hast doch bestimmt die paintComponent von deinem JFrame überschrieben oder? Das sollte man nicht machen. Schreib dir eine Klasse die von JPanel ableitet und überschreibe dort die paintComponent. Diese Komponente setzt du dann als contentPane.
Zu 2.
Ich nehme an du hast da eine TextArea die scrollt? Dann mach folgendes: textArea.setCaretPosition(textArea.getDocument().getLength());
@EikeB : - Ne, soweit bin ich schon nach 3 jahren, trozdem danke ^^
- verändert sich der wert der scrollbar dann auch? dann versuch ichs mal, danke @Marco13 : -was meinst du mit kacke? gibts alternativen?
-stimmt jetzt fällts mir auch auf mit den buchstaben grössen… aber egal, dann rate ich halt weiter.
Nein. Ich meinte nur, dass man, immer wenn man mit Fonts hantiert, auf Schwierigkeiten stößt. Von “A” wie “Ausrichtung” über “L” wie “Logische Fonts” und “P” wie “Physische Fonts” (und natürlich “U” wie “Unicode”) bis “Z” wie “Zeichensatz”.
Ich hab das gefühl die scrollpane kommt nicht mit den bordern klar.
aber ich weiß auch nicht wie ich das umgehen soll?..
Auch wenn ich eine übertriebene zahl einsetze (zB getMaximum() + 2000) bleibt die scorllbar ab und zu
oberhalb des eigetnlichen maximums hängen…
mit caret position funktioniert es genau deshalb nicht, weil die area nen blank border (oder empty border…) hat.
Hier jedenfalls ein Kskb:
Meine Theorie:
Der setText-Aufruf führt dazu, dass das Maximum von chatScrollbar neu berechnet wird und dass automatisch gescrollt wird. Das läuft über ein Event und passiert deshalb nach dem setValue-Aufruf.
Glücklich bin ich damit nicht, aber auf die Schnelle eine Möglichkeit: chatScrollbar.setValue(chatScrollbar.getMaximum()); ans Ende der EventQueue packen.
Versuch mal, ob es hiermit funktioniert: chatViewArea.scrollRectToVisible(new Rectangle(0, chatViewArea.getHeight(), chatViewArea.getWidth(), 100));
Alternativ vielleicht die Border unten schmäler halten/weg lassen, dann fällt es nicht auf
" + text);```
Die TextArea bietet auch die Methode append(String) um Inhalte anzuhängen.
Okay ich versuche das mit der eventqueue gleich, klappt das dann bei dir papoy?
haha ja michael, ist wohl eher ein LSKB
sry hatte keine zeit mehr das zu kürzen gestern ^^
hm, ich hätte die border schon gerne, weil ich da ein bisschen platz haben will. (sonst ist es so eng am rand)
ich versuch das gleich mit dem scrollrecttovisible, wo ist denn da der unterschied zu setValue() ?
danke für append, aber macht das nicht genau das selbe?
*** Edit ***
Hab mal nachgeschaut, im java src ist append so programmiert:
Weil der Weg über die Area (den Du in etwa mit Deinem Vorgehen beschreitest) ein unnötiger Umweg wäre. Die Area ist ja nur die „Hülle“ die den Text darstellt, dieser ist aber Inhalt des Document
achso ok.
siehe oben, es klappt leider immer noch nicht so toll…
bleibt noch die event queue variante.
*** Edit ***
es hatte tatsächlich mit dem zeitpunkt des aufrufs zu tun.
mit invoke later klappt es perfekt.
[OT]
Mal so ein kleiner Einschub: wenn ich jetzt blutiger total anfänger wäre, solche foren wie hier nicht kennen würde, usw…
auf sowas kommt man doch nicht… ich mein wenn da steht “scrolle zum maximalwert” und das ding einfach nicht bis zum maximal wert scrollt, das ist schon demotivierend…
[/OT]