2011-11-24 3 views
2

나는 간단한 문제가있는 것 같아요. 어떻게 해결해야하는지 .. 나는 이것을하려고합니다. 나는 JFrame을 가지고 있습니다. 그런 다음 JPanel을 만들고 레이아웃을 GridLayout (5,5)으로 설정합니다. Finnaly이 JPanel을 JFrame의 컨테이너에 추가합니다.JFrame의 컨테이너 내부에있는 JPanel의 폭과 높이가 0 인 이유는 무엇입니까?

내 패널의 너비를 얻으려고 할 때 나에게 0을주지 않아야합니까? 이 작업을 수행합니다. System.out.println (mypanel.getSize(). getWidth()); 그리고 그것은 그것이 0이라고 말합니다 : c 왜 ?? 내가 5 당 분할하고 각 레이블에 페인트하는 방법을 많이 알 수 있도록 크기를 알고 싶어요,이 .. 라벨의 격자 될 것 많이 사전에 감사합니다 ... 미리

덕분에 많이

public janela(){ 

    window = new JFrame("teste"); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setSize(300,300); 
    contentor = window.getContentPane(); 
    interior = new JPanel(); 
    interior.setLayout(new GridLayout(5,5)); 
    contentor.add(interior); 

    System.out.println(interior.getSize().getWidth()); //it says 0 ?!?! why?? 
    } 
얘들 아 !!

답변

3

패널의 레이아웃에 따라 크기가 조정됩니다. 구체적으로 표시되고 doLayout()이 호출됩니다. doLayout()은 패널의 내용과 레이아웃 관리자에 따라 적절한 크기의 패널이 무엇인지 파악합니다. 패널에 아무 것도 없으므로 적절한 크기는 0, 0입니다.

패널에 아무 것도 없으며이 (0, 0) 크기를 우회하려면 원하는 크기의 getPreferredSize()를 재정의 할 수 있습니다. 패널을 사용하여 패널이 레이아웃을 존중하도록 원하는 크기로 되돌립니다.

+0

답장을 보내 주셔서 감사합니다. 하지만 내 레이블을 패널에 추가하려고했는데 크기를 얻으려고 시도했지만 .. 여전히 0 점. 내 코드는 여기에서보세요 : http://pastebin.com/FEtFnK9r 미리 감사드립니다. ;) – TiagoM

+1

doLayout은 윈도우가 표시 될 때만 호출됩니다. 놓치지 않는 한 크기를 확인하기 전에 setVisible (true)을 호출해야합니다. – MeBigFatGuy

+0

고맙습니다. D – TiagoM