我有一个带有很多摆动组件的应用程序,嵌套在几个容器中.我正在实现一个右键单击弹出菜单,根据组件所在的上下文显示信息.
举个例子:如果我右键单击一个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;
}
Run Code Online (Sandbox Code Playgroud)
但我敢打赌,已经有一个更好的解决方案,我只是没有找到它.
有人可以给我一个提示吗?
您的代码基本上与该SwingUtilies.getAncestorOfClass()方法匹配.因此,您的代码可以简化为:
public static boolean isInScrollPane(JComponent comp)
{
return SwingUtilities.getAncestorOfClass(JScrollPane.class, comp) != null;
}
Run Code Online (Sandbox Code Playgroud)