2009-10-10 4 views
0

Webapp 용 GUI 작성 용 GWT-Ext 라이브러리를 사용합니다. NumberField 내부에서 Enter 키를 눌러 처리하고 싶습니다.GWT-Ext의 NumberField에서 Enter 키 핸들 콜백

final NumberField requiredHeight = new NumberField(); 
    requiredHeight.setValue(125); 
    requiredHeight.setAllowBlank(false); 
    requiredHeight.setAllowNegative(false); 
    requiredHeight.setAllowDecimals(false); 
    KeyListener listener = new KeyListener() { 

     public void keyPressed(KeyEvent e) { 
      if (e.getKeyCode()==13) 
       addPortlet(requiredHeight.getValue().intValue()); 
     } 

    }; 
    requiredHeight.addKeyListener(listener); 

그러나 코드는 아무것도하지 않습니다

그것은 다음과 같이해야합니다! 내가 뭘 잘못하고 있니? 일반적으로 필드에 이러한 핸들러를 추가하는 가장 좋은 방법은 무엇입니까?

답변

4

OK, 마침내 해결되었습니다. KeyListener 내부에 keyPressed 대신 componentKeyPress이라는 또 다른 콜백 함수가 있습니다. 이것은 올바른 코드입니다 : 키 업 키 다운과 키를 눌러, 귀하의 경우 완전히 무의미이있는 :

KeyListener listener = new KeyListener() { 
     @Override 
     public void componentKeyPress(ComponentEvent event) { 
      if(event.getKeyCode()==13) 
      { 
       addPortlet(requiredHeight.getValue().intValue()); 
      } 
      super.componentKeyPress(event); 
     } 

    }; 
    requiredHeight.addKeyListener(listener); 
0

사실에 키 리스너를 등록하는 3 개 가지 이벤트 리스너를 등록합니다. 다음과 같이

더 컴팩트 한 솔루션은 일반 청취자의 사용이 될 것입니다 :
가 (익명의 리스너 클래스를 사용하여 저를 용서 분명히 같은 효과를가 빠른 아직)

import com.extjs.gxt.ui.client.event.Events; 

requiredHeight.addListener(Events.OnKeyPress, new Listener<ComponentEvent>() { 
    @Override 
    public void handleEvent(ComponentEvent e) { 
     if (e.getKeyCode()==13) 
      addPortlet(requiredHeight.getValue().intValue());   
    } 
}); 
1

일부 메소드가 더 이상 사용되지 않으므로 간단한 로그인 양식에서 다음 코드를 사용합니다.

KeyDownHandler handler = new KeyDownHandler() { 

     @Override 
     public void onKeyDown(KeyDownEvent event) { 
      if (event.getNativeKeyCode() == 13) { 
       btnLogin.click(); 
      } 
     } 
    }; 
    tbLogin.addKeyDownHandler(handler); 
    tbPassword.addKeyDownHandler(handler); 
관련 문제