2010-04-11 59 views
2

我在SWT中製作一個包含文本字段和列表的組件。無論何時輸入文本,它都會過濾列表。到目前爲止,一切都很好,我只是想添加一些很好的可用性功能。Java SWT:將列表應用於列表到文本字段

我想要做的是在列表字段中偵聽任何按鍵事件,如果是按下Enter鍵我執行'ok'操作(已完成),否則我希望焦點更改爲文本字段並且在那裏觸發關鍵事件。基本上,如果焦點在List字段上,並且用戶輸入了我希望它自動鍵入到文本字段中的內容。

響應keyPressed或keyReleased事件可以將焦點設置爲文本字段,但我需要以某種方式重複keyEvent,以便無論輸入什麼內容。有任何想法嗎?

回答

2

所以這是我做過什麼:

itemList.addKeyListener(new KeyAdapter() { 
    public void keyReleased(KeyEvent e) { 
     if (e.keyCode == '\r' || e.keyCode == SWT.KEYPAD_CR) { 
      okButtonAction(); 
     } else if (e.keyCode == SWT.ARROW_UP || e.keyCode == SWT.ARROW_DOWN || e.keyCode == SWT.ARROW_LEFT || e.keyCode == SWT.ARROW_RIGHT) { 
      super.keyReleased(e); 
     } else if (e.character > 0) { 
      filterInput.setFocus(); 
      Event event = new Event(); 
      event.type = SWT.KeyDown; 
      event.keyCode = e.keyCode; 
      event.character = e.character;     
      Display.getCurrent().post(event); 
      try { 
       Thread.sleep(10); 
      } catch (InterruptedException ie) { 
       ie.printStackTrace(); 
      } 
      event.type = SWT.KeyUp; 
      Display.getCurrent().post(event); 
     } 
    } 
}); 

我讀了Display.post方法是有沒有做自動GUI測試,但在這裏工作我的目的,所以我會用它,除非任何人都可以給我一個很好的理由,爲什麼不?

0

我的第一個想法是,有可能是一種方法來重新觸發按鍵事件(或觸發它的副本)到文本字段。但是這可能不會產生期望的結果,因爲有些關鍵事件可能不希望從列表轉移到文本,例如,按向上和向下箭頭鍵在列表中進行導航。

所以,你應該決定哪些關鍵事件觸發的焦點轉移。從你的問題,我明白你正在實施一個文本過濾器,所以你應該限制傳輸到文本字符。一旦知道輸入的字符,您可以手動將其附加到過濾器文本(或插入文本字段的光標位置)。