JScrollpane不滚动大内容

问题描述:

我有这个简单的例子,我想在一个小框架中显示一个大面板。 Java文档告诉滚动窗格会自动将其内容放入其视口并添加滚动条。 但是我没有这样的运气。没有滚动窗格或其内容出现。 这是我试过的。JScrollpane不滚动大内容

public class MyWindow extends JFrame { 
    JPanel panel; 
    JScrollPane scroll; 

    public MyWindow(){ 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     panel = new JPanel(); 
     panel.setSize(1000,1000); 
     scroll = new JScrollPane(panel); 

     add(scroll,BorderLayout.CENTER); 
     setSize(300, 300); 
     setVisible(true); 
    } 
} 

如在类似的问题指出,

  1. 我提出的面板比帧更大。
  2. 我在框架中添加了边框布局。

仍然没有运气。

JScrollPane可以*地忽略面板的初始尺寸。您需要设置首选尺寸

panel = new JPanel() { 
    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(1000, 1000); 
    }; 
}; 
+0

奇怪!谢谢。我为此浪费了一天的时间。 – user3041058 2014-11-01 14:12:49

+2

@ user3041058,这将解决您发布的简单代码的问题。 '。 Java文档告诉滚动窗格会自动将其内容放入其视口并添加滚动条 - 但在实际应用中,您应该使用布局管理器,布局管理器将根据布局管理器的规则确定面板的首选大小以及您添加到面板的组件的首选大小。除非你正在创建一个自定义组件,否则你不应该重写getPreferredSize()方法。让布局经理去工作。 – camickr 2014-11-01 14:51:07