【问题标题】:add a scrollable jpanel to a gridlayout将可滚动的 jpanel 添加到 gridlayout
【发布时间】:2010-07-19 09:50:25
【问题描述】:

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

有什么想法吗?

非常感谢...

【问题讨论】:

  • 我猜你试过'setMinimumSize'?

标签: java swing jpanel jscrollpane


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多