6

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

举个例子:如果我右键单击 JTextField,如果文本字段在 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;
}

但我敢打赌,已经有更好的解决方案可用,但我只是没有找到。

有人可以给我一个提示吗?

4

1 回答 1

9

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

public static boolean isInScrollPane(JComponent comp)
{
  return SwingUtilities.getAncestorOfClass(JScrollPane.class, comp) != null;
}
于 2012-04-30T10:31:01.973 回答