ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
6635
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    DarthShader ist offline Mitglied Platin
    Registriert seit
    May 2004
    Beiträge
    684
    Hallo,

    ich habe eine JScrollPane, darin ein JPanel, welches ich mit weiteren Componenten dynamisch fülle. Da ich eben dieses Panel fülle, taucht irgendwann die vertikale Scrollleiste vom JScrollPane auf, das ist natürlich klar und soll auch so sein, damit ich den Inhalt nach unten scrollen kann.

    Was ich nun aber erreichen möchte, ist das programmiertechnische, also automatische scrollen bis ans Ende (unten), damit alle neu hinzugefügten Komponenten sofort sichtbar sind (ähnlich einem Chatfenster, das auch automatisch nach unten scrollt).

    Dies bekomme ich jedoch einfach nicht hin. Ich habe es bisher so versucht, genau nachdem ich eine Komponente dem Panel hinzugefügt habe, und damit auch die vertikale Scrollbar aufgetaucht ist:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    // Referenz auf das scrollbar objekt holen
    JScrollBar vsb = jScrollPane1.getVerticalScrollBar();
     
    // Zum debuggen die aktuellen werte der scrollbar ausgeben
    System.out.println( "current: " + vsb.getValue() );
    System.out.println( "max:     " + vsb.getMaximum() );
    System.out.println( "extent:  " + vsb.getVisibleAmount() );
     
    // Versuchen, ganz nach unten zu scrollen:
    vsb.setValue( vsb.getMaximum() - vsb.getVisibleAmount() );

    Leider funktioniert es so nicht. Die scrollbar scrollt zunächst gar nicht, wenn dann mehr Komponenten hinzu kommen und damit vsb.getMaximum() immer größer wird, scroll die Bar ein kleines Stückchen nach unten, aber auf keinen Fall ganz. Ich kann nicht nachvollziehen, was da passiert.

    Ist mein Ansatz, zu scrollen, falsch? Habe ich irgendetwas vergessen, oder macht man es gänzlich anders?

    Ich würde mich über Hilfe sehr freuen


    Vielen Dank!
     

  2. #2
    Avatar von Manuel Hegemann
    Manuel Hegemann ist offline Mitglied Gold
    Registriert seit
    Oct 2007
    Ort
    Groß-Rohrheim (Hessen)
    Beiträge
    145
    Hi,

    das Problem ist, dass der neu hinzugefügt teil von getMaximum() noch nicht abgedeckt wird. Ich habe herausgefunden, dass die scrollbar auf diese art und weise immer auf den vorletzten eintrag runterscrollt, jedoch nicht zum letzten.
    habe dafür noch keine lösung.

    nach vielem herumsuchen bin ich aber immer wieder auf die methode getviewport von jscrollpane gestoßen, jedoch bin ich noch nicht ganz dahinter gestiegen, wie es so funktionieren soll.

    Viele Grüße,
    BigManu
    Geändert von Manuel Hegemann (03.10.07 um 23:12 Uhr)
     

  3. #3
    heizer_26 ist offline Mitglied Bronze
    Registriert seit
    Jun 2007
    Beiträge
    25
    Hi wenn da jemanden interesieren wurde es geht so :

    mann mus bei der
    Code :
    1
    
    this.getJScrollPane().getVerticalScrollBar().setValue(text.length());


    wobei der "text" ist eine Varaible welche ich in eine JEditPane , die sich in JScrollPane befindet , in setTex(text) reingebe.
     

  4. #4
    §78 Tutorials.de Gastzugang
    Folgende Lösung:
    (unter der Vorraussetzung das die schreibende Funktion ein eigenständiger Thread ist )

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    public void setStatus(String i){
                // Liest vorhandenes Textfeld ein und erweitert es um die Zeile i als String
                this.jTextArea1.setText(jTextArea1.getText()+"\n"+i);
                // erhöht die Anzahl der Zeilen im Textfeld um 1 
                this.jTextArea1.setRows(this.jTextArea1.getRows()+1);
                // setzt ScrollPane Wert auf den Maximalbezugswert des inneligenden contents (minimalwert ScrollPane  + Anzahl der Zeilen im Textarea)
                jScrollPane1.getVerticalScrollBar().getModel().setValue(jScrollPane1.getVerticalScrollBar().getModel().getValue()+jTextArea1.getRows());
                this.validate();
                this.repaint();
            }
        }

    Scrollt immer nach unten. Scrollpane bezieht sich immer auf seinen Content (soweit der Bekannt ist), in diesem Fall jTextArea->Row.
     

Thema nicht erledigt

Ähnliche Themen

  1. JSrollBar bzw. JScrollPane automatisch nach oben scrollen
    Von Rabenherz im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 11
    Letzter Beitrag: 01.08.09, 01:37
  2. Scrollbar automatisch nach unten scrollen
    Von blackrose4me im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 18.05.08, 10:14
  3. Antworten: 1
    Letzter Beitrag: 09.01.08, 15:51
  4. Automatisch nach unten scrollen
    Von proloser im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 22.08.04, 13:37
  5. automatisch nach unten Scrollen
    Von Slater im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 31.03.03, 16:48