2013-10-16 120 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