为什么我不能验证JComponent?

时间:2011-12-02 20:51:00

标签: java swing layout jcomponent

来自JavaDoc

  

public void validate()

     

验证此容器及其所有子组件。验证容器意味着布置其子组件。

这就是我想要做的。使用尽可能轻量级的组件。但当我执行此操作时JComponent调用validate()不会使该组件“有效”。

    JComponent c = new JComponent() {};
    System.out.println(c.isValid()); // false
    c.validate();
    System.out.println(c.isValid()); // false

为什么我不能使JComponent有效?

3 个答案:

答案 0 :(得分:4)

isValid()的文档中,它说:

  

如果组件的大小正确且位于其父容器中且其所有子组件也有效,则该组件有效。

在您到达Top-Level ContainerJFrameJInternalFrameJApplet)之前,就是这种情况。在您的问题示例中,您的JComponent没有父母,因此永远无效。

答案 1 :(得分:0)

java.awt.Component.isValid()州的Javadoc:

  

当组件的大小正确且位于其父容器中且其所有子组件也有效时,该组件有效。

简而言之,在将组件添加到容器之前,您无法验证该组件。

答案 2 :(得分:0)

要添加答案中的内容,请不要忘记覆盖getPreferedSize()方法以返回组件首选大小。否则,布局管理器将不会定位您的JComponent,因此不会显示。