动态添加JPanel时计算的大小错误

时间:2010-08-13 23:42:58

标签: java swing layout size

我正在编写一个虚拟笔记本应用程序。我们的想法是将具有各种内容(基于外部文件)的面板添加到充当页面的面板中。该页面填满后,其专用的add方法应该返回false。

问题是当我添加它们时,我无法弄清楚如何准确地确定面板的大小,所以我最终添加了太多。面板的优选尺寸通常太短,尺寸为0高。有没有办法确定组件在布局中占用的确切大小?

我尝试过使用doLayout(),但它似乎没有改变我的组件的大小或preferredSize。也许我没有正确使用它?这是add方法:( contentPanel有BoxLayout,内容面板没有设置大小,但被添加到面板(this)中。此方法所在的类扩展了JPanel)

public boolean addSpecializedgPanel(SpecializedPanel sp) {

    this.contentPanel.add(sp);

    this.doLayout();

    if (this.contentPanel.getSize().height > this.getHeight()) {
        this.contentPanel.remove(sp);
        return false;
    }

    return true;
}

感谢您的帮助(即使它批评我的整个设计:))!这是一个巨大的麻烦!

2 个答案:

答案 0 :(得分:1)

我不认为你应该处理这样的大小,你应该使用布局管理器。也许你应该看看How to use CardLayout

答案 1 :(得分:1)

你想在面板上使用Container.validate()(可能先调用invalidate()):

  

public void validate()

     

验证此容器及其所有子组件。

     

validate方法用于使容器再次布置其子组件。在容器显示后修改此容器的子组件(添加到容器中或从容器中删除,或更改布局相关信息)时,应调用它。

这会导致布局发生,从而调整组件的大小。在删除失败的面板之后,您需要在返回false之前使()无效。