从字段到字段的标签不起作用(在Java SWT中也称为“标签顺序”)

时间:2016-03-10 09:28:00

标签: java forms swt tabbing

我有一个带有各种页面等的Java SWT桌面应用程序pp。除了Tab键顺序之外它完全正常 - 完全没有。当我在“字段1”并按键盘上的Tab键时,我希望应用程序跳转到“字段2”,因此在输入第一个字段后,我不必单击第二个字段。

通常有“setTabList”,您可以在其中设置“通过表单制表”的正确顺序。我的问题是我甚至不需要设置正确的顺序,标签根本不起作用。

当我在我的表格字段并按Tab键时,我可以看到Windows“工作圈”(或其他任何名称)并且没有任何反应。光标完全保持在同一位置。它不会跳到另一个领域,我不知道为什么。

通常我的代码:

public void createControl(Composite parent) {
  Composite container = new Composite(parent, SWT.BORDER);
  setControl(container);

  fieldOne = new StyledText(container, SWT.NONE);
  fieldOne.setBounds(whatever);
  fieldOne.addKeyListener(new KeyAdapter() {
    public void keyReleased(KeyEvent arg0) {
      txtChanged();
    }
  });

  fieldTwo = new StyledText(container, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
  fieldOne.setBounds(whatever);
  fieldOne.addKeyListener(new KeyAdapter() {
    public void keyReleased(KeyEvent arg0) {
      txtChanged();
    }
  });

  Control[] controls = { fieldOne, fieldTwo };
  container.setTabList(controls);
}

即使我将Control []和container.setTabList行留下,也没有任何反应。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

StyledText控件选项卡中,通常只需将光标移动到控件内的下一个制表位。 Ctrl + Tab 移动到下一个控件。

您可以使用遍历侦听器覆盖它:

fieldOne.addTraverseListener(new TraverseListener() {
  @Override
  public void keyTraversed(final TraverseEvent e) {
    if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == SWT.TRAVERSE_TAB_PREVIOUS) {
      e.doit = true;
    }
  }
});

您的主要监听器也可能干扰正常操作。如果你想知道的是文本已经改变,请使用ModifyListener