@ApiStatus.Internal
  public @Nullable AbstractTreeNode<?> getVisibleAndSelectedUserObject() {
    JTree tree = getTree();
    if (tree == null) return null;
    TreePath path = TreeUtil.getSelectedPathIfOne(tree);
    if (path == null) return null;
    Rectangle bounds = tree.getPathBounds(path);
    if (bounds == null) return null;
    Rectangle visible = tree.getVisibleRect();
    if (bounds.y < visible.y || bounds.y > visible.y + visible.height - bounds.height) return null;
    return TreeUtil.getLastUserObject(AbstractTreeNode.class, path);
  }
@ApiStatus.Internal
  public @Nullable AbstractTreeNode<?> getVisibleAndSelectedUserObject()