2010-04-11 56 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

我的第一个想法是,有可能是一种方法来重新触发按键事件(或触发它的副本)到文本字段。但是这可能不会产生期望的结果,因为有些关键事件可能不希望从列表转移到文本,例如,按向上和向下箭头键在列表中进行导航。

所以,你应该决定哪些关键事件触发的焦点转移。从你的问题,我明白你正在实施一个文本过滤器,所以你应该限制传输到文本字符。一旦知道输入的字符,您可以手动将其附加到过滤器文本(或插入文本字段的光标位置)。