@Override
  public void doLayout() {
    if (!isValid()) {
      calculateBounds();
      calculateAutoPopupRect();
    }
    final int componentCount = getComponentCount();
    LOG.assertTrue(componentCount <= myComponentBounds.size());
    for (int i = componentCount - 1; i >= 0; i--) {
      final Component component = getComponent(i);
      component.setBounds(myComponentBounds.get(i));
    }

    if (myNeedCheckHoverOnLayout) {
      Point location = MouseInfo.getPointerInfo().getLocation();
      SwingUtilities.convertPointFromScreen(location, this);
      for (int i = componentCount - 1; i >= 0; i--) {
        final Component component = getComponent(i);
        if (component instanceof ActionButton actionButton && component.getBounds().contains(location)) {
          actionButton.myRollover = true;
        }
      }
    }
  }
@Override
  public void doLayout()