2009-11-17 2 views
0

이벤트 (내 경우 loginEvent)를 수신하는 사용자 정의 합성 위젯을 만들었습니다. 이벤트가 잡히면 위젯의 상태가 바뀌어 표시됩니다 (제 경우에는 아이콘 중 하나를 사용자가 로그인 한 신호로 변경하고 싶습니다).gwt에서 UI 새로 고침

그러나 이벤트가 잡히면 새 상태에 따라 위젯 자체를 다시 그릴 수 있습니까?

나는이 작업을 수행하는 방법에는 여러 가지가있다

답변

1

... 너무 완만하고 정교한하시기 바랍니다 GWT 꽤 새로운 오전. 이 예에서는 로그인/로그 아웃을 표시하고 로그인 한 사용자가 이벤트를 발생시킬 때 표시 여부를 전환하는 방법을 보여줍니다.

HorizontalPanel panel = new HorizontalPanel(); 
Image oldImage = new Image("url to old img"); 
panel.add(oldImage); 

이 그럼 당신은 같은 것을 할 수 있어야한다 :이 같은이있는 경우

public class LoginLogoutWidget extends Compostite { 
    private final Anchor m_loginLink; 
    private final Anchor m_logoutLink; 

    public LoginLogoutWidget() { 

     m_loginLink = new Anchor("Login"); 
     //Register event handlers etc 

     m_logoutLink = new Anchor("Logout"); 
     //Register event handlers etc 

     HorizontalPanel hp = new HorizontalPanel(); 

     hp.add(m_loginLink); 
     hp.add(m_logoutLink); 

     initWidget(hp); 

     //Default login visible, and logout invisible 
     m_logoutLink.setVisible(false); 
    } 

    public void onLoginEvent(boolean loggedIn) {   
     m_loginLink.setVisible(!loggedIn); 
     m_logoutLink.setVisible(loggedIn); 
    } 
} 
-3

panel.remove(oldImage); 
Image newImage = new Image("url to new img"); 
panel.add(newImage); 

panel.layout(); 

내가 발견 한 그 어떤 경우에는, 경우 I 상위 컨테이너에서 "layout()"메서드를 호출하지 마십시오. 그러면 프로그래밍 방식으로 추가 한 내용이 예상 한 것처럼 화면에 나타나지 않습니다.

희망 하시겠습니까?

+0

panel.layout() - 핵심 GWT가 아닌 GXT처럼 들리네 .... 아니, 다양한 이유로 GXT에서 예상대로 작동하지 않습니다. 변경 사항은 즉시 적용되지 않습니다. DOM, 일반 GWT와는 다릅니다. 이것은 .layout() 및 유사한 메소드에 대한 모든 종류의 초과 호출을 발생시킵니다. 적어도 우리가 그 라이브러리에서 벗어나기 시작하기 전에 우리 코드에서 그랬습니다. 사이드 트 랙 오버, 그렇지 않으면 좋은 점. – bikesandcode

관련 문제