Java 找出组件是否在特定容器中

Java 找出组件是否在特定容器中,java,swing,Java,Swing,我有一个应用程序,它有很多swing组件,嵌套在几个容器中。 我正在实现一个右键单击弹出菜单,根据组件所在的上下文显示信息 举个例子: 如果右键单击JTextField,如果textfield在JScrollPane中,我希望在弹出窗口中显示“foo”,如果不在JScrollPane中,则显示“bar”。但是JTextField本身可能嵌套在其他几个jpanel中 我可以这样做: public static boolean isInScrollPane(JComponent comp) {

我有一个应用程序,它有很多swing组件,嵌套在几个容器中。 我正在实现一个右键单击弹出菜单,根据组件所在的上下文显示信息

举个例子: 如果右键单击JTextField,如果textfield在JScrollPane中,我希望在弹出窗口中显示“foo”,如果不在JScrollPane中,则显示“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;
}
但我打赌已经有了一个更好的解决方案,我只是没有找到它


有人能给我一个提示吗?

您的代码基本上与方法匹配。因此,您的代码可以简化为:

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

啊,我早就想到会这么简单。我看了一下猪栏,但没看到这个。谢谢