2014-06-09 75 views
0

我想有一个JPanel一个JScrollpane在另一个JPanel在加入我的基本JFrameJScrollPane的用的JPanel在其他的JPanel

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); 

如果我加入了JScrollpaneJPanel直接到JFrame,该JScrollpane工作。但是现在,当我将帧的大小减小到500像素以下时,JPanel变得更小,如第二张图所示。

BEFORE AFTER

我怎样才能让JScrollPane工作?

+0

最简单的解决方法是在调用'pack()'后调用'JFrame.setMinimiumSize(JFrame.getSize())'。但为了更快提供更好的帮助,请发布[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可验证示例)。 –

+1

这很可能是外面板的布局与你一起玩耍。尝试使用BorderLayout和EmptyBorder ... – MadProgrammer

+0

如果'this'是JFrame:不要将组件直接添加到框架。改为使用'JFrame.setContentPane(outer)'。 – Thomas

回答

1

GridBagLayout是东正是预期它。当可用空间很小以符合组件的首选大小时,它将使用该组件的最小大小。

相反,考虑使用BorderLayoutEmptyBorder生产约滚动窗格的空白

您还可以使用的GridBagConstraints

weightx/yfillinsets性能在How to use GridBagLayout看看更多详细信息