2014-07-24 3 views
0

Swing을 처음 사용하므로 Java 자습서 및 API를 읽습니다. 나는 JComponent (DTPicture- 드래그 앤 드롭 지원)의 서브 클래스로 놀아왔다. 기본적으로 GridLayout으로 패널을 만듭니다. 그런 다음 패널에 DTPicture 개체를 채 웁니다. DTPicturegetLocation()을 상속했습니다. 그러나이 값을 호출하면 값은 0입니다. 그러나 GUI를 실행하면 DTPicture 개체가 세로로 스팬됩니다. 그렇다면 getLocation은 왜 0을 반환합니까?JComponent를 추가 할 때 getY()가 반환됩니다.

감사합니다.

아래 코드는 입니다. * 다른 모든 것은 초기화되고 선언되고 구현되었습니다. 컴포넌트가 생성 될 때

public class RackBuilderTool extends JPanel{ 
    //maps rack slot # to DTPicture location on JPanel 
    public static Point[] slotIDArray = new Point[42]; 

    public RackBuilderTool() { 
    super(new GridLayout(42, 1)); 

     //DTPicture[] rackSlotArray = new DTPicture[42]; 
     for (int i = 0; i < 42; i++) { 
      //add(new ComponentLabel()); 
      DTPicture temp = new DTPicture(null); 
      System.out.println(add(temp).getLocation()); 
      //address of DTPicture Component 
      slotIDArray[i] = temp.getLocation(); 

     } 
    } 
+0

[This] (http://www.java2s.com/Tutorial/Java/0240__Swing/HowtoUseGridLayout.htm)는 귀하의 노력을 지원해야합니다. –

답변

4

그러나이 호출되면, 그 값은 0

크기 (위치) 성분 디폴트 0이다. 나는 그러나 GUI를 실행하면

, 나는 DTPicture 객체가 수직

레이아웃 매니저 (들)에 걸쳐 참조 구성 요소의 크기/위치를 결정하기위한 책임이 있습니다. 그러나 프레임에 pack() 또는 setVisible(true)을 사용할 때만 레이아웃 관리자가 호출됩니다.

표시 프레임에 구성 요소를 추가하는 경우 revalidate() 메서드를 사용하여 레이아웃 관리자를 호출해야합니다.

생각해 보면 레이아웃 관리자는 모든 구성 요소의 크기를 조정하는 방법을 모르기 때문에 모든 구성 요소가 패널에 추가 될 때까지 작업을 수행 할 수 없습니다. 특히 GridLayout의 경우 모든 구성 요소가 가장 큰 구성 요소와 동일한 크기로 만들어집니다. 그러면 모든 구성 요소가 추가 될 때까지 가장 큰 구성 요소가 무엇인지 어떻게 알 수 있습니까? 구성 요소가 추가 될 때마다 레이아웃을 수행하는 것이 그리 효율적이지는 않습니다.

관련 문제