2017-03-22 1 views
0

Ich habe ein JPanel in einem JScrollPane. Das JPanel enthält mehrere JTextAreas vertikal.Wie scrolle ich nach oben - JPanel mit mehreren JTextases in Jscrollpane

Ich mag es, den Bildlauf des Scrollpanels immer nach oben zu halten, wenn die Seite aktualisiert wird. Derzeit beginnt der Bildlauf immer von unten.

dies mein aktueller Code ist und es nicht funktioniert ..

panel.invalidate(); 
    panel.revalidate(); 
    panel.repaint(); 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      ((JPanel) panel).setLocation(new Point(0, 0)); 
     } 
    }); 

habe ich versucht, auch unten an scrollpane dieser Code hinzufügen, aber es funktioniert nicht ..

scrollPanel.getViewport().setViewPosition(new Point(0, 0)); 

Ich habe andere stackoverflow Fragen untersucht und sie verwenden Jtexttarea in Jscrollpane (sie lösten es mit setCaretPosition (0), aber ich kann nicht die gleiche Funktion für das Panel verwenden). In meinem Fall gibt es eine zusätzliche Ebene.

Wie kann ich das lösen ..?

EDIT **

Basierend auf Beratung von Pavlo Viazovskyy, habe ich versucht, auch diese unter und es immer noch nicht für mich arbeiten .. :(

javax.swing.SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      scrollPane.getVerticalScrollBar().setValue(0); 
     } 
    }); 
+0

macht Wenn Sie setCaretPosition (0 verwenden) auf JScrollPane, das dein JPanel hält, sollte es den Trick machen. –

+0

Vielen Dank für Ihre Eingabe. JScrollPane hat die Methode nicht; setCaretPosition() .. Gibt es eine Möglichkeit, es auf JScrollPane zu verwenden? –

+0

Verstanden. Ich hoffe [dieser Beitrag] (http://stackoverflow.com/questions/291115/java-swing-using-jscrollpane-and-having-it-scroll-back-to-top) wird dir helfen. –

Antwort

2

Vielen Dank für alle Kommentare Entschuldigung, ich gab kein vollständiges richtiges Beispiel in der Frage, da es zu viele verschiedene Klassen gab ..

In meinem Fall, Textareas innerhalb des Gremiums innerhalb ScrollPane, machte ich die Rolle zum Anfang vorbei Standard, indem die setViewPosition-Methode für scro verwendet wird llPane in der Invoke-Methode.

SwingUtilities.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     scrollPane.getViewport().setViewPosition(new Point(0, 0)); 
    } 
}); 
2

Für, wenn Sie auf die JScrollPane direkten Zugang nicht haben, können Sie einfach JComponent#scrollRectToVisible

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Rectangle; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.SwingUtilities; 

public class ScrollTest { 

    public static void main(String[] args) { 
     new ScrollTest(); 
    } 

    public ScrollTest() { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Test"); 
       frame.add(new JScrollPane(new BigPane())); 
       frame.setSize(200, 200); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class BigPane extends JPanel { 

     public BigPane() { 
      setLayout(new BorderLayout()); 
      JButton scroll = new JButton("Scroll to top"); 
      add(scroll, BorderLayout.SOUTH); 
      scroll.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        scrollRectToVisible(new Rectangle(0, 0, 1, 1)); 
       } 
      }); 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(400, 400); 
     } 

    } 

} 

Ja, man konnte die Komponentenhierarchie gehen, bis Sie eine JViewport gefunden, aber diese Methode funktioniert es für dich.

Gerade obwohl erinnern, die Rectangle relativ zum Bauteil ist, das die Methode aufgerufen, so dass, wenn ich die JButton stattdessen verwendet, würde es versuchen, die JButton sichtbar, nicht auf die Platte

+0

panel.getBounds && JComponent # scrollRectToVisible :-) – mKorbel

Verwandte Themen