2010-07-19 45 views
0

我正在构建一个充满标签的网格。其中一个包含html文本,并应调整为最大格式并可滚动。我发现如何添加一个JScrollPane,但它保持一行高度,即使当我给它一个400x400的大小时,我也找不到如何调整它的大小......将一个可滚动的jpanel添加到网格布局

删除getViewport()会得到相同的结果。

JPanel grid = new JPanel(new GridLayout(1,2)); 

// first cell of the grid 
grid.add(new JLabel("title")); 

// second cell of the grid, this should be the scrollable one 
JScrollPane scroll = new JScrollPane(); 
scroll.getViewport().setSize(400, 400); 
scroll.getViewport().add(new JLabel("<html>long<br>html<br>text</html>")); 
grid.add(scrollVersion, BorderLayout.CENTER); 

任何想法?

非常感谢......

+0

我想你试过'setMinimumSize'? – sje397 2010-07-19 10:06:23

回答

1

网格布局不尊重它勾画出的组件的首选大小。它旨在使所有网格单元具有相同的大小。另一种方法是使用GridBagLayout,但是我个人会推荐ZoneLayout这在我看来更简单,功能强大,而且更直观。随着cheatsheet你不会出问题。

作为一个方面说明,BorderLayout.CENTER是一个用于BorderLayout的约束,与GridLayout不兼容。当组件被添加到GridLayout的所有者时,您不需要提供约束。使用GridLayout从左上角的单元格开始左右添加组件。

0

GridBagLayout更换您的网格布局。有了正确的约束条件,它应该像魅力一样工作。显然,看看some examples,因为GridBagLayout看起来相当复杂,但在一些示例中相当简单。

0

GridLayout的所有单元格被设计为具有相同的大小,所以如果你想要一个大于这个东西,你必须使用另一个LayoutManager,就像Riduel所建议的GridBagLayout。

此外,如果你的JLabel将不得不多行,我建议你通过一个不可编辑的JTextPane更换IT运的JTextArea

相关问题