2010-04-15 7 views
1

RootPanel.get("foo").add(button)을 사용하여 모듈 entrypoint html 페이지의 요소에 Buttons가 연결되어 있습니다. 이후 LayoutPanel을 만들고 RootLayoutPanel.get.add(layoutpanal)을 사용하여 첨부하면 버튼을 클릭 할 수 없습니다. 이것은 괜찮습니다. 그런 다음 레이아웃 패널을 제거하고 제거하거나 RootLayoutPanel을 지우면 버튼을 클릭 할 수 없습니다.GWT에서 RootLayoutPanel을 어떻게 지우시겠습니까?

아이디어를 삭제하는 방법은 무엇입니까? 단계를 놓친 적이 있습니까? 아니면 RootLayoutPanel을 사용했다면 페이지의 RootPanel을 사용해 본 적이 없습니까?

샘플 코드 :

public void onModuleLoad(){ 

    final LayoutPanel lp1=new LayoutPanel(); 

    ClickPanel ping=new ClickPanel("Ping"); 
    ping.getElement().getStyle().setBackgroundColor("#fdd"); 
    ping.addClickHandler(new ClickHandler(){ 
     @Override 
     public void onClick(ClickEvent event){ 
      Window.alert("Ping!!!"); 
      //lp1.removeFromParent(); 
      //RootLayoutPanel.get().remove(lp1); 
      //RootLayoutPanel.get().removeFromParent(); 
      RootLayoutPanel.get().clear(); 
     } 
    }); 

    ClickPanel bong=new ClickPanel("Bong"); 
    bong.getElement().getStyle().setBackgroundColor("#ddf"); 
    bong.addClickHandler(new ClickHandler(){ 
     @Override 
     public void onClick(ClickEvent event){ 
      Window.alert("Bong!!!"); 
     } 
    }); 

    lp1.add(ping); 
    lp1.setWidgetLeftWidth(ping, 100, Style.Unit.PX, 500, Style.Unit.PX); 
    lp1.setWidgetTopHeight(ping, 100, Style.Unit.PX, 500, Style.Unit.PX); 

    lp1.add(bong); 
    lp1.setWidgetLeftWidth(bong, 50, Style.Unit.PCT, 600, Style.Unit.PX); 
    lp1.setWidgetTopHeight(bong, 50, Style.Unit.PCT, 200, Style.Unit.PX); 

    Button b=new Button("Click Me"); 
    b.addClickHandler(new ClickHandler(){ 
     @Override 
     public void onClick(ClickEvent event){ 
      RootLayoutPanel.get().add(lp1); 
     } 
    }); 
    RootPanel.get("button1").add(b); 
} 

ClickPanel은 단순히 HasClickHandelers을 구현 HTMLPanel을 대체합니다. "Click Me"를 클릭하면 레이아웃 패널이 열립니다. 패널 ping을 클릭하면 레이아웃 패널이 제거되지만 버튼 "클릭"은 클릭 할 수 없습니다. 나는 다양한 옵션을 시도했다. RootPanel.get().remove(RootLayoutPanel.get())를 호출

업데이트

RootLayoutPanel LayoutPanel을 삭제하고 인 RootPanel에 위젯을 클릭 할 수 있도록를 제거합니다. 그러나 후속 호출 인 RootLayoutPanel.get.add()IndexOutOfBoundsException을 던지기 때문에 무언가가 엉망이됩니다. 그래서 이것은 완전한 대답이 아닙니다.

+0

방화범이나 유사한 도구로 DOM을 검사 해 보셨습니까? 어쩌면'RootLayoutPanel'에서 여전히 "남은 음식"이 남아있을 수도 있습니다. –

+0

예, div가 남아 있습니다. 아마 들어가서 DOM을 바로 잡을 수는 있지만 꽤 부서지기 쉬운 것 같습니다. 버그입니까 아니면 제대로 사용하지 않았습니까? GWT 프로젝트에 버그로 게시하고 그들이 말하는 것을 볼 수도 있지만 먼저 질문을하겠습니다. – Kerr

+0

이것은 내가 사용하는 것입니다. RootPanel.get(). remove (RootLayoutPanel.get()); 하지만 작동하지 않습니다. 그리고 RootLayoutPanel.get(). clear()도 작동하지 않습니다. – Ben

답변

4

두 번째 StackOverflow 질문, 두 번째 대답은 나 혼자입니다. 그게 나쁜가요?

따라서 RootLayoutPanel.get()의 첫 번째 호출은 두 가지 작업을 수행합니다. RootLayoutPanel 개체를 만들고 자체에 대한 단일 참조를 유지하며 RootPanel.get().add()을 호출하여 자체를 RootPanel에 추가합니다.

RootPanel.remove(RootLayoutPanel.get())을 사용하여 제거 할 수 있지만 RootLayoutPanel.get()을 호출하면 반환되는 단일 참조는 RootLayoutPanel으로 남게됩니다. 이것은 아무 것도 붙어 있지 않기 때문에 아무 것도 추가 할 수 없습니다. IndexOutOfBoundsException을 던지지 마십시오.

이 문제를 해결하려면 RootLayoutPanelRootPanel에 수동으로 RootPanel.get().add(RootLayoutPanel.get())으로 다시 첨부 할 수 있습니다. RootLayoutPanel이 이미 부착되어 있어도이 전화를 걸면 아무런 해를 끼치 지 않는다고 말할 수 있습니다.

+0

나는 똑같은 문제점을 추가하고 그 해결책을 사용했다. 그것은 작동합니다. 그러나 어디서나 문서화 된 것을 발견하지 못했습니다. –

0

RootPanel.get().remove(lp1) 어떨까요? (lp1은 위의 코드에서 LayoutPanel입니다.)

+0

아니, 그게 아무것도하지 않습니다. 나는 그것을 시험해 보았지만, 실제로 그것을 기대하지는 않았다. – Kerr

0

왜 RootPanel을 전혀 사용합니까?

있습니다 (이 경우는 foo는 요소에 연결해야하지만)

RootLayoutPanel.get("foo").add(button); 
RootLayoutPanel.get.add(layoutpanal); 

RootLayoutPanel 문서의 몸에 붙어서 시도해야합니다. 내가 아는 한 그것은 화면의 모든 사용 가능한 공간을 차지합니다 (또는 더 정확하게 말하면 브라우저 창에서 모든 공간을 차지합니다).

이렇게하면 버튼을 사용하고 레이아웃 패널을 사용할 수 있습니다.

+0

그 코드에 어떤 일이 일어날 지 모르겠지만 RootLayoutPanel.get ("foo") 같은 메소드는 없습니다. – Kerr

+0

"왜 RootPanel을 사용하는 이유는 무엇입니까?" 페이지의 레이아웃을 제어하는 ​​기존 코드입니다. 나는 새로운 것을 추가하고 그것을 끝내고 나면 화면 전체를 차지하려고한다. – Kerr

+0

맞아 - rootLayoutPanel.get ("foo")가 존재하지 않습니다. 나는 문서를 조사했다. 나는 RootLayoutPanel이 몸체 요소에 붙어 있기 때문에 문제가 있다고 생각한다. 코드를 살펴보고 정확히 무슨 일이 일어나는 지 볼 수 있습니다 ... – markovuksanovic

관련 문제