Java JScrollpane与另一个JPanel中的JPanel

Java JScrollpane与另一个JPanel中的JPanel,java,swing,jpanel,jscrollpane,Java,Swing,Jpanel,Jscrollpane,我想在另一个JPanel中添加一个JScrollpane和JPanel在我的基本JFrame JPanel outer = new JPanel(new GridBagLayout()); JPanel drawPanel = new JPanel(new GridBagLayout()); drawPanel.add(new DrawingBoard(500,500)); drawPanel.setBackground(Color.WHITE); JScrollPane scrollPane

我想在另一个
JPanel
中添加一个
JScrollpane
JPanel
在我的基本
JFrame

JPanel outer = new JPanel(new GridBagLayout()); 
JPanel drawPanel = new JPanel(new GridBagLayout());
drawPanel.add(new DrawingBoard(500,500));
drawPanel.setBackground(Color.WHITE);
JScrollPane scrollPane = new JScrollPane(drawPanel);
outer.add(scrollPane);
this.add(outer, BorderLayout.CENTER);
如果我将带有
JPanel
JScrollpane
直接添加到
JFrame
,则
JScrollpane
起作用。但是现在,当我将帧的大小减小到500像素以下时,
JPanel
会变小,如第二张图片所示


如何使
JScrollPane
工作?

GridBagLayout
正是对它的期望。当可用空间太小,无法满足构件的首选尺寸时,将使用构件的最小尺寸

取而代之的是,考虑使用<代码>边界布局< /代码>和<代码> EvyTimeEng/<代码>,以生成滚动窗格

周围的空白空间。 您还可以使用
GridBagConstraints


查看更多详细信息

最简单的修复方法是在调用
pack()
后调用
JFrame.setMinimiumSize(JFrame.getSize())
。但为了更快地获得更好的帮助,请发布一个(最简单的完整且可验证的示例)。很可能是外部面板的布局对您造成了影响。尝试使用BorderLayout和EmptyByOrder…如果
是JFrame:不要直接向框架添加组件。改为使用
JFrame.setContentPane(outer)
。@Thomas自Java 5以来,JFrame#添加重定向以自动获取内容窗格,不过老实说,通过getContentPane通常问题较少,因为并非所有容器方法都是以这种方式连接的;)