tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
2483
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Rabenherz
    Rabenherz Rabenherz ist offline Mitglied
    Registriert seit
    Jul 2008
    Ort
    Siegen
    Beiträge
    24
    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
     

  2. #2
    Avatar von Orbit
    Orbit Orbit ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    175
    Das geht über das BoundedRangeModell:
    PHP-Code:
    JScrollbar scrollBar scrollDisPane.getVerticalScrollBar();
    BoundedRangeModel brm scrollBar.getModel();
    brm.setValue(0); 
    hoffe das läuft so...
    Orbit

    Oder auf deine Weise:
    PHP-Code:
    scrollDisPane.getVerticalScrollBar().getModel().setValue(0); 
    Geändert von Orbit (04.07.08 um 23:14 Uhr)
     

  3. #3
    Avatar von Rabenherz
    Rabenherz Rabenherz ist offline Mitglied
    Registriert seit
    Jul 2008
    Ort
    Siegen
    Beiträge
    24
    Funktioniert leider auch nicht, gleiches Ergebniss wie bei den obigen Methoden...sprich der Balken ist weiterhin runtergescrollt.

    Hab auch beide Varianten ausprobiert....
     

  4. #4
    Avatar von Orbit
    Orbit Orbit ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    175
    hmmm poste mal deinen Code.. bei mir geht das ohne Probleme...
     

  5. #5
    Avatar von Rabenherz
    Rabenherz Rabenherz ist offline Mitglied
    Registriert seit
    Jul 2008
    Ort
    Siegen
    Beiträge
    24
    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
     

  6. #6
    Avatar von Rabenherz
    Rabenherz Rabenherz ist offline Mitglied
    Registriert seit
    Jul 2008
    Ort
    Siegen
    Beiträge
    24
    Leider immer noch keine neuerung...

    Hat keiner ne Idee warum die Sachen nicht anpacken? Liegts vielleicht an den Editorpanes?
     

  7. #7
    Avatar von Orbit
    Orbit Orbit ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Beiträge
    175
    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
     

  8. #8
    Avatar von Rabenherz
    Rabenherz Rabenherz ist offline Mitglied
    Registriert seit
    Jul 2008
    Ort
    Siegen
    Beiträge
    24
    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?
     

  9. #9
    Avatar von Rabenherz
    Rabenherz Rabenherz ist offline Mitglied
    Registriert seit
    Jul 2008
    Ort
    Siegen
    Beiträge
    24
    Ich push das nochmal...kann doch nicht sein das es für so ein "einfaches" Problem keine Lösung gibt oder?
     

  10. #10
    Avatar von Vincentius
    Vincentius Vincentius ist offline Mitglied Brokat
    Registriert seit
    Sep 2004
    Ort
    Stuttgart
    Beiträge
    295
    Hallo,

    ich habe jetzt deinen Code getestet und ein wenig modifiziert:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    [...]
    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
     
    "Any sufficiently advanced technology is indistinguishable from magic." Arthur C. Clarke.

  11. #11
    Avatar von Rabenherz
    Rabenherz Rabenherz ist offline Mitglied
    Registriert seit
    Jul 2008
    Ort
    Siegen
    Beiträge
    24
    Funktioniert Astrein!

    Danke!
     

  12. #12
    Wyatt Wyatt ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    128
    Hi!

    bin auch nochmal über das Problem gestolpert und habe irgendwo (evtl. sogar hier!?) diese Lösung gefunden:

    Code java:
    1
    2
    
    Point point = new Point(0, (int)(textArea.getSize().getHeight()));
    scrollPane.getViewport().setViewPosition(point);

    Je nachdem, wo man scrollen lassen will, muss das zweite Argument für den Point-Constructor geändert werden...
    Funktioniert bei mir weitaus besser als die invokeLater-Variante!

    HTH & Gruß
     

Ähnliche Themen

  1. JScrollPane automatisch nach unten scrollen
    Von DarthShader im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 22.02.10, 12:48
  2. Antworten: 1
    Letzter Beitrag: 09.01.08, 15:51
  3. JScrollPane - Automatisch zu unterstem Punkt scrollen
    Von Manuel Hegemann im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 14.11.07, 09:34
  4. Scrollpane nach oben scrollen
    Von dadom110 im Forum Java
    Antworten: 3
    Letzter Beitrag: 02.03.06, 12:52
  5. Nach Iframe laden, wieder nach oben scrollen
    Von MediaPlanet im Forum HTML & XHTML
    Antworten: 7
    Letzter Beitrag: 28.08.03, 22:15