如何知道何时将JComponent添加到其父项?

Ern*_*dis 1 java swing jcomponent

首先,创建JComponent实例jComponent。然后像一样将其添加到其父项中parent.add(jComponent);。现在,我想在jComponent课堂上知道它已添加到它的父项中。有可能这样做吗?

目标是jComponent在已将其添加到父项时设置父项,例如:

Container window = getParent();
        while (!(window instanceof JWindow)) {
            window = window.getParent();
        }
JWindow parent = (JWindow) window;
Run Code Online (Sandbox Code Playgroud)

Enw*_*red 5

有多种选择,具体取决于您的需求。

如果您想知道何时将任何现有组件添加到父级,则可以向其添加HierarchyListener并监听PARENT_CHANGED类型的事件,该事件将组件添加到父级发送。

例:

component.addHierarchyListener(new HierarchyListener() {

  @Override
  public void hierarchyChanged(HierarchyEvent e) {
    if ( (e.getChangeFlags() & HierarchyEvent.PARENT_CHANGED) != 0) {
      if (getParent() == e.getChangedParent()) {
         System.out.println("*** Added to parent " + e.getChangedParent());
      }
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

如果已经在创建自定义组件,则可以覆盖“ addNotify()”方法:

@Override public void addNotify() {
  super.addNotify();
  // do something here with getParent();
}
Run Code Online (Sandbox Code Playgroud)

如果只想在组件可见后才知道父项,则可以使用AncestorListener。该 ancestorAdded(AncestorEvent)将被调用每一个组件变得可见时。例如,每次用户选择该选项卡进行显示时,JTabbedPane内的JPanel上的AncestorListener都会收到此类事件。