确定组件是否在特定容器内

6

我有一个包含大量Swing组件的应用程序,它们嵌套在多个容器中。

我正在实现右键弹出菜单,根据组件所在的上下文显示信息。

举个例子: 如果我右键单击一个JTextField,如果这个textfield是在JScrollPane中,我希望在弹出窗口中显示"foo",如果不是则显示"bar"。但是这个JTextField本身可能嵌套在几个其他的JPanel中。

我可以像这样做:

public static boolean isInScrollPane(JComponent comp) {

    Container c = comp.getParent();

    while (c != null) {         
        if (c instanceof JScrollPane) {
            return true;
        } else {
            c = c.getParent();
        }
    }
    return false;
}

但我敢打赌,已经有一个更好的解决方案了,只是我没有找到它。

能否有人给我指点一下?

1个回答

9

你的代码基本上与SwingUtilies.getAncestorOfClass()方法匹配。因此,你的代码可以简化为:

public static boolean isInScrollPane(JComponent comp)
{
  return SwingUtilities.getAncestorOfClass(JScrollPane.class, comp) != null;
}

啊,我已经想到它会这么简单了。我查看了_SwingUtilities_但没有看到这个。谢谢! - moeTi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接