我正在编写一个虚拟笔记本应用程序。我们的想法是将具有各种内容(基于外部文件)的面板添加到充当页面的面板中。该页面填满后,其专用的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;
}
感谢您的帮助(即使它批评我的整个设计:))!这是一个巨大的麻烦!
答案 0 :(得分:1)
我不认为你应该处理这样的大小,你应该使用布局管理器。也许你应该看看How to use CardLayout
答案 1 :(得分:1)
你想在面板上使用Container.validate()(可能先调用invalidate()):
public void validate()
验证此容器及其所有子组件。
validate方法用于使容器再次布置其子组件。在容器显示后修改此容器的子组件(添加到容器中或从容器中删除,或更改布局相关信息)时,应调用它。
这会导致布局发生,从而调整组件的大小。在删除失败的面板之后,您需要在返回false之前使()无效。