private boolean accept(Component aComponent) { if (!(aComponent.isVisible() && aComponent.isDisplayable() && aComponent.isFocusable() && aComponent.isEnabled())) { return false; } // Verify that the Component is recursively enabled. Disabling a // heavyweight Container disables its children, whereas disabling // a lightweight Container does not. if (!(aComponent instanceof Window)) { for (Container enableTest = aComponent.getParent(); enableTest != null; enableTest = enableTest.getParent()) { if (!(enableTest.isEnabled() || enableTest.isLightweight())) { return false; } if (enableTest instanceof Window) { break; } } } return true; }
@Nullable private static Container getContainer(@Nullable final Component focusOwner) { if (focusOwner == null) return null; if (focusOwner.isLightweight()) { Container container = focusOwner.getParent(); while (container != null) { final Container parent = container.getParent(); if (parent instanceof JLayeredPane) break; if (parent != null && parent.isLightweight()) { container = parent; } else { break; } } return container; } return SwingUtilities.windowForComponent(focusOwner); }