JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird

vinno

Mitglied
Hey,
ich bin gerade dabei ein Programm von mir zu erweitern. Dabei möchte ich einer JTextArea eine JScrollBar hinzufügen. Das klappt auch alles soweit.
Wenn nun die Methode JTextArea.append() verwendet wird, soll automatisch die JScrollBar um die Zeilen, um die die JTextArea erweitert wurde weiterscrollen. Dafür habe ich folgende Methode:
Java:
public void outappend (String msg) {
        JTextArea.append(msg);
        JScrollBar.setValue(JScrollBar.getValue() + JScrollBar.getModel().getExtent());
}
Aber wird nun Text hinzugefügt, wird zwar weitergescrollt aber nicht um die Anzahl der Zeilen.
Auch, bei diesem Code, bei dem bis zum Ende gescrollt werden soll, wird nur bis kurz davor gescrollt:
Code:
public void outappend (String msg) {
        JTextArea.append(msg);
        JScrollBar.setValue(JScrollBar.getMaximum() + JScrollBar.getModel().getExtent());
}
Weis jemand, wo mein Fehler liegt?
 

vinno

Mitglied
Falls es was nützt: (Debug Ergebnisse)
nach JTextArea.append(msg); erscheint die Nachricht sofort und die Scrollbar erweitert sich. Also müsste JScrollBar.getMaximum(); wirklich das Maximum inklusive neuer Nachricht bekommen.
 

vinno

Mitglied
Falls niemand eine Lösung hat: mit awt habe ich alles hinbekommen, außer dass bei awt keine automatischen Zeilenumbrüche gemacht werden. Wenn jemand weis, wie das ginge, würde mir dies auch helfen, obwohl ich swing lieber nutzen würde.
 

Enceladus271

Bekanntes Mitglied
Ich glaube getExtend ist nicht das was du brauchst. Probiers mal so:
Java:
int lineHeight = jTextArea.getFontMetrics( jTextArea.getFont() ).getHeight();
jScrollBar.setValue( jScrollBar.getValue() + anzahlNeueZeilen * lineHeight );

Das beim Scrollen bis zum Ende nicht bis ganz zum Ende gescrollt wird, kann ich mir nur so erklären, dass die Scrollbar erst später mitbekommt, dass sich das Maximum geändert hat. Versuch mal so was:

Java:
        SwingUtilities.invokeLater( new Runnable() {

           @Override
           public void run() {
             jScrollBar.setValue( jScrollBar.getMaximum() );
           }
         } );
 

vinno

Mitglied
int lineHeight = jTextArea.getFontMetrics( jTextArea.getFont()).getHeight();
jScrollBar.setValue( jScrollBar.getValue()+ anzahlNeueZeilen * lineHeight );
Habe ich bereits probiert. Selbst wenn ich total unrealistisch große Werte für die Zeilenlänge angebe, landet der Balken nicht am gewünschten Platz.
Was meinst du mit dem 2.? Ich bin wohl noch Anfänger
 

vinno

Mitglied
Also das Zweite funktioniert. Abgesehen davon, dass die anzahlNeueZeilen sich mit dem Bildschirmausschnitt verändert (durch automatische Zeilenumbrüche). Ich kann diese also nicht einfach so ermitteln. Deswegen dachte ich mir, dass ScrollBar auf das Maximum gesetzt werden soll, wenn ScrollBar im vorhinein auch auf dem Maximum stand.
Also if(JScrollbar.getValue() == JScrollbar.getMaxiumum()).
Aber dies klappt mal wieder nicht. JScrollbar.getMaximum ist ein viel größerer Wert, als wenn bei JScrollbar.getValue() der Balken am Maximum ist.
 

Enceladus271

Bekanntes Mitglied
Das die Werte nicht identisch sind liegt daran, dass getValue die Position des oberen Teils der Scrollbar zurückgibt. Wenn du beispielsweise deine Textarea 200 Pixel hoch ist, die Scrollpane 100 Pixel und du ganz nach unten scrollst, wird getValue 100 sein und getMaximum 200.

Ich hab nochmal eine andre Möglichkeit wie es geht ohne die Anzahl der Zeilen zu kennen:
Java:
        final int oldMaximum = jScrollBar.getMaximum();
         jTextArea.append( msg );
         SwingUtilities.invokeLater( new Runnable() {

           @Override
           public void run() {
             final int spaceAppended = jScrollBar.getMaximum() - oldMaximum;
             jScrollBar.setValue( jScrollBar.getValue() + spaceAppended );
           }
         } );
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Swing JScrollBar AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
R Swing JScrollBar mit JTextField koppeln AWT, Swing, JavaFX & SWT 3
P JScrollBar designen oder unsichtbar machen AWT, Swing, JavaFX & SWT 10
G Swing Value von einer JScrollBar auf eine andere übertragen AWT, Swing, JavaFX & SWT 2
T Swing JScrollBar fetter machen? AWT, Swing, JavaFX & SWT 2
H JScrollBar nicht verstellbar AWT, Swing, JavaFX & SWT 2
B Swing JScrollBar in einem JPanel mit FlowLayout AWT, Swing, JavaFX & SWT 15
A Swing JPanel in JScrollBar scrollbar machen AWT, Swing, JavaFX & SWT 4
D Swing JScrollbar ganz nach unten scrollen AWT, Swing, JavaFX & SWT 2
A JScrollBar durch Button ersetzten AWT, Swing, JavaFX & SWT 2
xehpuk Swing JScrollBar wird nicht eingeblendet, wenn JTable befüllt wird AWT, Swing, JavaFX & SWT 4
B Swing JScrollPane - observen wann eine JScrollBar angezeigt wird? AWT, Swing, JavaFX & SWT 5
V Position der JScrollBar ändern AWT, Swing, JavaFX & SWT 5
G Swing JTextArea/JScrollpane: JScrollbar position AWT, Swing, JavaFX & SWT 8
D Swing JScrollbar zentrieren AWT, Swing, JavaFX & SWT 3
Asamandra Benutzerdefinierte JScrollBar AWT, Swing, JavaFX & SWT 4
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JScrollBar-Position festlegen.. AWT, Swing, JavaFX & SWT 3
R JScrollBar - Immer drei Zeilen weiter AWT, Swing, JavaFX & SWT 10
R JScrollBar mit eigenem look and feel AWT, Swing, JavaFX & SWT 6
C JScrollpane eigenen jScrollBar einfügen AWT, Swing, JavaFX & SWT 2
R JScrollBar / JScrollPane: Ermitteln ob ganz unten AWT, Swing, JavaFX & SWT 2
F JScrollbar Verschiebung des Viewport ermitteln AWT, Swing, JavaFX & SWT 3
M JScrollbar + JTable + Zeilen wie in Excel hinzufügen AWT, Swing, JavaFX & SWT 14
M JScrollbar + Adjustmentlistener + Button AWT, Swing, JavaFX & SWT 3
M Listener für Button auf JScrollbar AWT, Swing, JavaFX & SWT 10
J JScrollBar scroll-Verhalten auf 2 JButtons umleiten? AWT, Swing, JavaFX & SWT 2
J JScrollBar lässt sich nicht auf minimum setzten AWT, Swing, JavaFX & SWT 7
T JScrollbar UI verändern AWT, Swing, JavaFX & SWT 5
D Problem mit JScrollBar, AutoScroll und JTextArea AWT, Swing, JavaFX & SWT 2
B horizontale bzw. vertikale JScrollBar breite von JScrollPane AWT, Swing, JavaFX & SWT 5
loadbrain Mehrer Panesl: JScrollBar, JScrollPane? AWT, Swing, JavaFX & SWT 9
K JTextArea + JScrollBar AWT, Swing, JavaFX & SWT 11
B Setzen von Position > 90 bei JScrollbar nicht möglich AWT, Swing, JavaFX & SWT 3
V Farben setzen bei einigen Komponenten (JScrollBar, . AWT, Swing, JavaFX & SWT 3
P Breite eines JScrollbar vergrößern, aber wie? AWT, Swing, JavaFX & SWT 8
M JScrollbar bei einer JTable AWT, Swing, JavaFX & SWT 5
L JScrollBar AWT, Swing, JavaFX & SWT 3
B Problem mit der Kombination von JScrollBar und JTextArea AWT, Swing, JavaFX & SWT 2
S Anzeige-Wirrwar in JScrollbar AWT, Swing, JavaFX & SWT 3
B Listener entfernen bei JScrollbar AWT, Swing, JavaFX & SWT 6
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
berserkerdq2 Mein Rechteck hat 4 Seiten, ich soll je nach dem, welche Seite berührt wurde, etwas ausführen, wie prüfe ich das? AWT, Swing, JavaFX & SWT 12
Zeppi Swing Button soll Spiel zurücksetzen AWT, Swing, JavaFX & SWT 5
A Titelleiste soll Pfad ausgeben AWT, Swing, JavaFX & SWT 16
G Eintrag soll nur einmal in Listview zu sehen sein AWT, Swing, JavaFX & SWT 3
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
W JavaFX CSS - was soll mir das sagen? AWT, Swing, JavaFX & SWT 2
D JavaFX Menu soll nicht bei jedem Click verschwinden AWT, Swing, JavaFX & SWT 8
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
O Soll ich einen JEditorPane verwenden ? AWT, Swing, JavaFX & SWT 5
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
S JavaFX Node soll auch nach Skalierung zentriert platziert sein AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
M JavaFX StackedBarChart y-Axis soll nur Integerwerte anzeigen AWT, Swing, JavaFX & SWT 1
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
P JavaFX Slider soll Value erst ab einer bestimmten Bedinung aendern AWT, Swing, JavaFX & SWT 19
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
V Swing Button soll unter anderem Button sein AWT, Swing, JavaFX & SWT 2
P Fenstergröße ändern, Panel soll gleich bleiben AWT, Swing, JavaFX & SWT 2
F JavaFX Timeline Animation soll X- und Y-Position während Animation ändern AWT, Swing, JavaFX & SWT 2
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
T MausClick soll TExt ändern AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
T SWT SWTBot Test: Dialog soll sich öffnen,wenn button gedrückt AWT, Swing, JavaFX & SWT 3
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
windl Warum soll ich zu JavaFX? AWT, Swing, JavaFX & SWT 18
H Java3D, ViewP Translattform soll sich nach einerformgroup richten. AWT, Swing, JavaFX & SWT 5
S Hauptfenster soll geöffnet bleiben AWT, Swing, JavaFX & SWT 4
M JDialog soll JFrame "blockieren" AWT, Swing, JavaFX & SWT 2
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
F Swing JTextfield Beispieltext soll nach Klick verschwinden AWT, Swing, JavaFX & SWT 3
TheJavaKid DocumentListener soll Text in JTextField ändern AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
J Swing String soll als Variable dienen AWT, Swing, JavaFX & SWT 11
M EditorPane Inhalt anders als er soll! AWT, Swing, JavaFX & SWT 2
C LayoutManager Grafik soll nicht im GridLayout Skalieren AWT, Swing, JavaFX & SWT 3
M Swing ActionEvent soll von Anderem ActionEvent abhängen AWT, Swing, JavaFX & SWT 3
J Button soll nach Klick Text ändern und Programm in 3 Sekunden beenden AWT, Swing, JavaFX & SWT 6
H Swing Button Klick soll "Untermenü-Buttons" erzeugen AWT, Swing, JavaFX & SWT 2
Z Swing JPanel soll größer werden als Parent Container (überlappen) AWT, Swing, JavaFX & SWT 5
D Swing jSlider soll selber weiterwandern, je nach zeit der musik AWT, Swing, JavaFX & SWT 5
A SWT Tooltip soll nicht verschwinden, solange User mit Maus auf Control ist AWT, Swing, JavaFX & SWT 5
D Swing JProgressBar soll ende erkennen AWT, Swing, JavaFX & SWT 4
S JVM von Oracle/Sun soll für AWT/SWING Elemente die die Optimierungen der NVidia Treiber verwenden AWT, Swing, JavaFX & SWT 3
J Swing JDialog blokiert mehrere JFrames - soll aber nur den aufrufenden blockieren AWT, Swing, JavaFX & SWT 4
N Applet JButton soll html Datei aus einem Ordner öffnen AWT, Swing, JavaFX & SWT 2
Z Bei Klick auf JButton soll ein anderer JButton erscheinen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben