2011-02-01 5 views
4

나는 다른 모든 클래스에 넣은 메뉴 막대 클래스 (MenuBarGUI)가 있는데, 메뉴의 옵션을 통해 현재 JFrame을 닫을 수 있는지를 알아야합니다. 일반적으로 setVisible (false)를 호출 한 다음 dispose()를 호출 할 수 있지만 메뉴 막대에 현재 프레임에 대한 참조가 없으므로이를 수행 할 수 없습니다. 이 일을 할 수있는 방법이 있습니까?Java에서 현재 프레임에 대한 참조를 가져 오는 방법이 있습니까?

답변

4

, 당신은 메뉴 표시 줄의 창을 얻을 수 getTopLevelAncestor 방법을 사용할 수 있습니다 : 여기

은 예입니다.

+0

감사합니다. 이것은 효과가 있었다. 컨테이너를 캐스팅하고 setVisible (false) 및 dispose()를 호출하면 작동했습니다. – LOD121

1

getParent()은 상위 컨테이너를 가져옵니다. 이 방법을 사용하면 일부 캐스팅을 수행해야합니다. 보다 이상적인 옵션은 메뉴 바가 close 메소드를 포함하는 인터페이스를 가질 수있게하는 것입니다. 당신의 MenuBarGUI 클래스의 JMenuBar를 확장하는 경우

JFrame frame = new JFrame(); 
    JMenuBar bar = new JMenuBar(); 
    frame.setJMenuBar(bar); 
    if(bar.getParent().getParent().getParent() instanceof JFrame){ 
     System.out.println(bar.getParent().getParent().getParent()); 
    } 
+0

? 컨테이너를 창에 던지는 것이 얼마나 안전 할 지 확신하지 못합니다 (매우 안전하지 않은 것 같습니다). 또한 어떻게 다른 방법을 구현할 수 있습니까? – LOD121

+0

예제를 추가했지만이 경로를 사용하는 경우 Gursel의 getTopLevelAncestor 제안이 더 적절할 것입니다. – jzd

+0

감사합니다. instanceof를 사용하여 JFrame 인스턴스인지 확인한 다음 컨테이너를 JFrame에 캐스팅하고 setVisible (false) 및 dispose()를 수행하여 창을 닫습니다. 잘 돌아갔다. – LOD121

0

위의 방법 중 어느 것도 나를 위해 작동하지 않았습니다.

난 단지 패널의 바로 위 부모를 필요로하기 때문에

은 슈퍼 호출을 통해 직접 액세스 : 등 super.setTitle ("새로운 프레임 제목"), 나는의 getParent() 메소드를 구현할 수 정확히 어떻게

관련 문제