frame
— единственный JFrame
в моем приложении Swing. Поскольку JFrame
расширяет Window
, по описанию и названию метода я полагал, что код должен возвращать сам фрейм.
SwingUtilities.windowForComponent(frame)
общедоступное статическое окно windowForComponent (компонент aComponent)
Вернуть окно компонента
Но возвращает null
, потому что реализация такая
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;
}
Вы согласны с тем, что реализация метода неточна?
UPD: я имею в виду, что JFrame передается в метод windowForComponent
, JFrame
расширяет Window
, поэтому должна быть дополнительная проверка, например
if (c instanceof Window) return (Window)c; //in windowForComponent
UPD2: Поэтому мне пришлось бы реализовать
public static Window windowForComponent (Component c) {
if (c instanceof Window)
return (Window)c;
return SwingUtilities.windowForComponent(c);
}
windowForComponent()
- person Nikolay Kuznetsov   schedule 15.01.2013