2009-07-08 3 views
2

에 레이아웃을 setLayout으로 설정 한 다음 getLayout으로 검색하면 LayoutManager이 달라집니다. 무슨 일 이니?JFrame 레이아웃이 내가 설정 한 레이아웃이 아닌 이유는 무엇입니까?

public class Lay { 
    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       java.awt.Container container = 
        new javax.swing.JFrame(); 
        //new javax.swing.JPanel(); 
       java.awt.LayoutManager layout = 
        new java.awt.GridLayout(); 
       container.setLayout(layout); 
       layout = container.getLayout(); 
       System.err.println(layout); 
      } 
     }); 
    } 
} 

java.awt.BorderLayout[hgap=0,vgap=0] 

를 제공하지만 JPanelJFrame를 교체하면 나는 Java API for JFrame에서

java.awt.GridLayout[hgap=0,vgap=0,rows=1,cols=0] 

답변

11

를 얻을 :

public void setLayout(LayoutManager manager) 

LayoutManager을 설정합니다. 조건부로 통화를 contentPane으로 전달하려면 재정의됩니다. 자세한 내용은 RootPaneContainer을 참조하십시오.

그리고 RootPaneContainer 페이지에서

:

이 인터페이스는 특별히, 하나의 JRootPane를 포함 JFrame 같은 구성 요소를 처리하는 Swing GUI 빌더, 마커 역할을합니다. 기본적으로 편리 JFrame, JDialog, JWindow, JAppletJInternalFrame, 들어, 앞으로, 기본적으로 contentPaneadd, removesetLayout 방법에 대한 모든 호출. 이것은 당신이 호출 할 수 있습니다 의미 :

rootPaneContainer.add(component); 

대신을 :

rootPaneContainer.getContentPane().add(component); 

JRootPane 모든 헤비급 구성 요소가 기본 OS 창처럼 표시하는 데 사용하는 일반적인 구성 요소입니다. 메뉴 바, 닫기/최소화/최대화 버튼 등을 처리합니다. JRootPane이 실제 작업을 수행한다는 사실을 숨기려고 시도하지만,이 경우에는 혼란 스럽습니다.

+0

나보다 앞서 있습니다. 잘하셨습니다! – basszero

+1

getContentPane 항목의 근거에 대해 Hans Muller는 다음과 같이 설명합니다. http://weblogs.java.net/blog/hansmuller/archive/2005/11/jframeadd_conte.html – McDowell

+0

즉, setLayout()은 JFrame에서 재정의되며 getLayout()이 아닙니다 ... –

관련 문제