java swing jframe swingutilities

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); }