java - SwingUtilities.windowForComponent(JFrame) devuelve nulo
(1)
Puede confundir la jerarquía de clases con la jerarquía de contención . La declaración JFrame extends Window representa una relación de subclase / superclase, mientras que getWindowAncestor() examina la relación de dos instancias de Container . Tenga en cuenta que JFrame es un top-level container y una subclase de Window .
frame es el único JFrame en mi aplicación Swing. Como JFrame extiende Window , he creído por descripción y nombre de método que el código debería devolver el marco en sí.
SwingUtilities.windowForComponent(frame)
público estático Ventana windowForComponent (Component aComponent)
Devuelve la ventana de aComponent
Pero devuelve null , porque la implementación es así
public static Window windowForComponent(Component c) {
return getWindowAncestor(c);
}
public static Window getWindowAncestor(Component c) {
for(Container p = c.getParent(); p != null; p = p.getParent()) {
if (p instanceof Window) {
return (Window)p;
}
}
return null;
}
¿Estás de acuerdo en que la implementación del método no es precisa?
UPD: me refiero a que JFrame se pasa al método windowForComponent , JFrame extends Window por lo que debería haber una verificación adicional como
if (c instanceof Window) return (Window)c; //in windowForComponent
UPD2: Entonces tendría que implementar
public static Window windowForComponent (Component c) {
if (c instanceof Window)
return (Window)c;
return SwingUtilities.windowForComponent(c);
}