0

我正在构建一个充满标签的网格。其中之一包含 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);   

有任何想法吗 ?

非常感谢 ...

4

3 回答 3

1

GridLayout 不尊重其布局的组件的首选大小。它旨在使所有网格单元大小相同。另一种方法是使用 GridBagLayout,但我个人会推荐ZoneLayout,它(在我看来)更简单、同样强大且更直观。有了备忘单,您就不会出错。

附带说明一下,BorderLayout.CENTER 是用于 BorderLayout 的约束,与 GridLayout 不兼容。将组件添加到 GridLayout 的所有者时,您无需提供约束。使用 GridLayout 从左上角单元格开始从左到右添加组件。

于 2010-07-19T11:47:55.037 回答
0

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

于 2010-07-19T10:05:10.593 回答
0

GridLayout 的所有单元格都设计为具有相同的大小,因此如果您希望一个单元格比其他单元格大,则必须使用另一个 LayoutManager,例如 Riduel 建议的 GridBagLayout。

此外,如果您的 JLabel 将有不止一行,我建议您将其替换为不可编辑的 JTextPane o JTextArea

于 2010-07-19T11:28:12.280 回答