JSrollBar bzw. JScrollPane automatisch nach oben scrollen

Rabenherz

Mitglied
Moin

Ich hoffe mir kann hier jemand helfen, denn ich bin echt kurz davor in den Tisch zu beißen ^^.

Folgende Ausgangssituation:

Ein JPanel welche 3 JEditorPanes beinhaltet wird einem JScrollPane hinzugefügt...bisher kein Problem.

Jetzt werden in die EditorPanes Inhalte geladen, damit wird das Panel größer als der JFrame es zulässt und die Scrollbars kommen zum Einsatz...immernoch kein Problem.

ABER: Das ScrollPane wird immer automatisch ganz nach unten gescrollt und muss dann von Hand hochgescrollt werden, was wirklich nervig ist. Der Text soll von oben zu lesen sein und nicht von unten.

Ich hab mir also nen Wolf gegoogelt und auch verschiedene Läsungsvorschläge gefunden...die aber alle nicht Funktionieren ich hab folgendes versucht:

scrollDisPane.getVerticalScrollBar().setValue(scrollDisPane.getVerticalScrollBar().getMinimum());
scrollDisPane.scrollRectToVisible(new Rectangle(1,1,1,1));
scrollDisPane.setViewportView(display);
scrollDisPane.getViewport().setViewPosition(display.getLocation());

jeweils wahlweise mit oder ohne
scrollDispane.updateUI() und/oder scrollDisPane.validate()

scrollDisPane ist das JScrollPane
display ist das JPanel

Wie bekomm ich das verfluchte Teil nach oben gescrollt?

Ich hoffe mir kann jemand helfen, danke schonmal im vorraus
 
Das geht über das BoundedRangeModell:
PHP:
JScrollbar scrollBar = scrollDisPane.getVerticalScrollBar();
BoundedRangeModel brm = scrollBar.getModel();
brm.setValue(0);

hoffe das läuft so...
Orbit

Oder auf deine Weise:
PHP:
scrollDisPane.getVerticalScrollBar().getModel().setValue(0);
 
Zuletzt bearbeitet:
Funktioniert leider auch nicht, gleiches Ergebniss wie bei den obigen Methoden...sprich der Balken ist weiterhin runtergescrollt.

Hab auch beide Varianten ausprobiert....
 
private JPanel display;

private JEditorPane topPane;
private JEditorPane editablePane;
private JEditorPane bottomPane;

private JScrollPane scrollDisPane;

[...]

display = new JPanel();
topPane = new JEditorPane();
editablePane = new JEditorPane();
bottomPane = new JEditorPane();


[...]

display.add(topPane, BorderLayout.NORTH);
display.add(editablePane, BorderLayout.CENTER);
display.add(bottomPane, BorderLayout.SOUTH);

scrollDisPane = new JScrollPane(display);

[...]

topPane.setText(topCode);
editablePane.setText(editCode);
bottomPane.setText(bottomCode);

//scrollDisPane.getVerticalScrollBar().setValue(scrollDisPane.getVerticalScrollBar().getMinimum());
// scrollDisPane.scrollRectToVisible(new Rectangle(1,1,1,1));
// scrollDisPane.setViewportView(display);
// scrollDisPane.getViewport().setViewPosition(display.getLocation());
// scrollDisPane.getVerticalScrollBar().getModel().setValue(0);
JScrollBar scrollBar = scrollDisPane.getVerticalScrollBar();
BoundedRangeModel brm = scrollBar.getModel();
brm.setValue(0);
//
scrollDisPane.updateUI();
// scrollDisPane.validate();




[...] da hab ich immer Code weggelassen der nichts mit dem Problem zu tun hat

die auskommentierten Zeilen sind alles Sachen die ich schon ausprobier habe. Ende vom Lied ist immer das die Panes mit den entsprechenden Inhalten einwandfrei angezeigt werden...nur eben das Panel ganz nach unten gescrollt ist
 
Leider immer noch keine neuerung...

Hat keiner ne Idee warum die Sachen nicht anpacken? Liegts vielleicht an den Editorpanes?
 
versuche mal eiun ausführbares Stück Code zu erstellen, der nur die wichtigsten Kompoinenten des Problems beinhaltet und zeigt.. sprich ein Fenster, ein Editor Pane in Scrollpane oder eben so wie der beriehc geplant ist...
es kann auch sein dass dein problem wo ganz anders liegt... Also Problem nach und nach nocheinmal aufbauen und posten wenn dir der Fehler dabei nicht auffällt...
mfg, Orbit
 
Also ich hab jetzt nochmal ne eigene Klasse erstellt nur mit den nötigsten Komponente die ähnlich zu meiner Anwendung ist und das da schön übersichtlich stück für stück gemacht...und es ist das gleiche Problem.

public class TestGUI extends JFrame implements ActionListener{

//Objekte
private JPanel panel;
private JScrollPane scrollpane;
private JEditorPane editpane1;
private JEditorPane editpane2;
private JEditorPane editpane3;
private JButton button;
private BorderLayout layout;
private String text1;
private String text2;
private String text3;

//Constructor
public TestGUI(){
panel = new JPanel();
scrollpane = new JScrollPane(panel);
editpane1 = new JEditorPane();
editpane2 = new JEditorPane();
editpane3 = new JEditorPane();
button = new JButton("Press");
layout = new BorderLayout(10,10);

panel.setLayout(layout);

panel.add(editpane1, BorderLayout.NORTH);
panel.add(editpane2, BorderLayout.CENTER);
panel.add(editpane3, BorderLayout.SOUTH);
panel.add(button, BorderLayout.AFTER_LAST_LINE);

editpane1.setContentType("text/plain");
editpane2.setContentType("text/plain");
editpane3.setContentType("text/plain");

for (int i = 0; i < 20; i++){
text1 += ("\n!" + i);
}
for (int i = 0; i < 20; i++){
text2 += ("\n*" + i);
}
for (int i = 0; i < 20; i++){
text3 += ("\n#" + i);
}

editpane1.setText("");
editpane2.setText("");
editpane3.setText("");

button.addActionListener(this);

scrollpane.setVisible(true);
panel.setVisible(true);

this.add(scrollpane);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(100,300);
this.setResizable(false);
this.setVisible(true);


}

public void actionPerformed(ActionEvent arg0) {
String actionOrigin = arg0.getActionCommand();

if(actionOrigin.equals("Press")){
editpane1.setText(text1);
editpane2.setText(text2);
editpane3.setText(text3);

scrollpane.getVerticalScrollBar().setValue(scrollpane.getVerticalScrollBar().getMinimum());
scrollpane.getVerticalScrollBar().getModel().setValue(0);

}

}

}

Wie man sieht hab ich unten beides nochmal ausprobiert...aber der Scrollbalken bleibt unten (kann jeder gerne rauskopieren und selbst laufen lassen...einfach in irgendeiner main ein Objekt von TestGUI erzeugen).

Noch weitere Vorschläge?
 
Hallo,

ich habe jetzt deinen Code getestet und ein wenig modifiziert:
Java:
[...]
public void actionPerformed(ActionEvent arg0) {
    String actionOrigin = arg0.getActionCommand();

    if (actionOrigin.equals("Press")) {
        editpane1.setText(text1);
        editpane2.setText(text2);
        editpane3.setText(text3);

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
              scrollpane.getVerticalScrollBar().getModel().setValue(0);
            }
        });
    }
}
[...]
Nun wird das ScrollPane jedesmal nach oben gescrollt. Der Nachteil ist: man sieht dann den "Press"-Button nicht mehr. ;) Also ich würde den Button aus dem gescrollten Panel rausnehmen und ihn eine Ebene höher platzieren.

Grüße
Vincent
 

Neue Beiträge

Zurück