2013-10-16 64 views
-1

我知道很多人问这个问题,但我仍然无法解决这个问题。 我在JScrollPane中有一个JPanel。 JPanel包含六个动态加载的面板。 加载面板后,系统会垂直自动滚动到面板中间。 我必须避免这一点,所以我想这一点:滚动到JScrollPane中的顶部JPanel

panel.scrollRectToVisible(scrollPane.getBounds()); 

但它不工作。 我滚动面板以这种方式

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

你能不能帮我创建?

+0

panel.scrollRectToVisible(new Rectangle(0,0,1,1)); ? – StanislavL

+1

*“我知道很多人问这个问题,”*我知道很多没有做过研究的人开始他们的信息,暗示他们有。你在这个话题中看到的前三条SO线索是什么,为什么他们没有回答以前多次提出的问题? –

+0

粗鲁会帮助你,只要懒惰;-) -1两种态度。 – kleopatra

回答

4
  1. panel.scrollRectToVisible(scrollPane.getBounds());应该panel.scrollRectToVisible(JPanelAddedOnRuntime.getBounds());

  2. 其余的代码(张贴在这里)coudn't是作品,

  3. 为更好地帮助越早张贴SSCCE,短,可运行,可编译

编辑

的作品,你需要重新读我的第三部。点

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