将一个可滚动的jpanel添加到网格布局
问题描述:
我正在构建一个充满标签的网格。其中一个包含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);
任何想法?
非常感谢......
答
网格布局不尊重它勾画出的组件的首选大小。它旨在使所有网格单元具有相同的大小。另一种方法是使用GridBagLayout,但是我个人会推荐ZoneLayout这在我看来更简单,功能强大,而且更直观。随着cheatsheet你不会出问题。
作为一个方面说明,BorderLayout.CENTER是一个用于BorderLayout的约束,与GridLayout不兼容。当组件被添加到GridLayout的所有者时,您不需要提供约束。使用GridLayout从左上角的单元格开始左右添加组件。
答
与GridBagLayout更换您的网格布局。有了正确的约束条件,它应该像魅力一样工作。显然,看看some examples,因为GridBagLayout看起来相当复杂,但在一些示例中相当简单。
答
GridLayout的所有单元格被设计为具有相同的大小,所以如果你想要一个大于这个东西,你必须使用另一个LayoutManager,就像Riduel所建议的GridBagLayout。
此外,如果你的JLabel将不得不多行,我建议你通过一个不可编辑的JTextPane更换IT运的JTextArea
我想你试过'setMinimumSize'? – sje397 2010-07-19 10:06:23