2013-10-16 1 views
-1

많은 사람들이이 질문을 제기했지만이 문제를 해결할 수 없다는 것을 알고 있습니다. JScrollPane 안에 JPanel이 있습니다. JPanel에는 동적으로로드되는 6 개의 패널이 있습니다. 패널이로드 된 후 시스템은 패널 중앙으로 수직 자동 스크롤을 만듭니다. 내가 이것을 방지하기 위해, 그래서이 함께 노력 :맨 위로 스크롤하기 JScrollPane 내의 JPanel

panel.scrollRectToVisible(scrollPane.getBounds()); 

을하지만이 작동하지 않습니다. 내 스크롤은이 방법으로 당신이 나를 도와 줄 수

JScrollPane scrollPane= new JScrollPane(); 
scrollPane.setBounds(panel.getBounds()); 
scrollPane.setViewportView(panel); 

에서 생성 된?

+0

panel.scrollRectToVisible (새 직사각형 (0,0,1,1)); ? – StanislavL

+1

* "나는이 질문에 많은 사람들이 알고 있음을 안다."* 연구를하지 않은 많은 사람들이 자신의 메시지를 시작하여 그들이 가지고있는 것을 암시합니다. 주제에서 본 상위 3 가지 SO 스레드는 무엇이며, 이전에 여러 번 묻는 질문에 대답하지 않은 이유는 무엇입니까? –

+0

은 무례하다. 두 태도 모두 게으르다 .-) -1. – kleopatra

답변

4
  1. panel.scrollRectToVisible(scrollPane.getBounds()); 코드 (여기에 게시)의 panel.scrollRectToVisible(JPanelAddedOnRuntime.getBounds());

  2. 나머지해야 빨리 SSCCE, 짧은 실행 가능한, 컴파일 가능한

  3. 을 게시 더 나은 도움을,

  4. 작품 수 coudn't

편집

이 작동하면 다시 위 3 번을 다시 읽어야합니다. 점

import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.GridLayout; 
import java.util.Vector; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 

public class ScrollTesting { 

    private JPanel panel = new JPanel(); 
    private JScrollPane scrollPane = new JScrollPane(panel); 
    private Vector<JTextField> fieldsVector = new Vector<JTextField>(); 
    private Dimension preferredSize = new Dimension(400, 40); 
    private Font font = new Font("Tahoma", 1, 28); 

    public ScrollTesting() { 
     panel.setLayout(new GridLayout(100, 1)); 
     for (int i = 0; i < 100; i++) { 
      fieldsVector.addElement(new JTextField()); 
      fieldsVector.lastElement().setPreferredSize(preferredSize); 
      fieldsVector.lastElement().setFont(font); 
      panel.add(fieldsVector.lastElement()); 
     } 
     JFrame frame = new JFrame(); 
     frame.setSize(400, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(scrollPane); 
     frame.setVisible(true); 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JTextField tf = (JTextField) fieldsVector.lastElement(); 
       panel.scrollRectToVisible(tf.getBounds()); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       ScrollTesting scrollTesting = new ScrollTesting(); 
      } 
     }); 
    } 
} 
+0

내 편집 참조 – mKorbel

+0

대단히 고마워요. 문제는 내가 코드 panel.scrollRectToVisible (pan0.getBounds()); SwingUtilities.invokeLater 메소드 내부 – user2607498

+0

당신은 오신 것을 환영합니다 – mKorbel