将可滚动的jpanel添加到gridlayout

时间:2010-07-19 09:50:25

标签: java swing jpanel jscrollpane

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

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

有什么想法吗?

非常感谢...

3 个答案:

答案 0 :(得分:1)

GridLayout不尊重它所列出的组件的首选大小。它旨在使所有网格单元大小相同。另一种方法是使用GridBagLayout,但我个人会推荐ZoneLayout(在我看来)更简单,更强大,更直观。使用cheatsheet,你不会出错。

作为旁注,BorderLayout.CENTER是用于BorderLayout的约束,与GridLayout不兼容。将组件添加到GridLayout的所有者时,无需提供约束。使用GridLayout从左上角单元格开始从左到右添加组件。

答案 1 :(得分:0)

将您的GridLayout替换为GridBagLayout。使用正确的约束集,它应该像魅力一样工作。显然,看看some examples,因为GridBagLayout看起来相当复杂,但是有一些例子很简单。

答案 2 :(得分:0)

GridLayout的所有单元格都设计为具有相同的大小,因此如果你想要一个大于teh•你必须使用另一个LayoutManager,就像Riduel建议的GridBagLayout一样。

此外,如果您的JLabel将有多行,我建议您使用不可编辑的JTextPane替换它JTextArea