1

我有一个带有各种页面等的 Java SWT 桌面应用程序。pp。它工作得很好,除了选项卡顺序 - 一点也不。当我在“字段 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 行排除在外,也不会发生任何事情。

有任何想法吗?

4

1 回答 1

2

StyledText控件Tab中,通常只需将光标移动到控件内的下一个制表位。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如果您只想知道文本已更改,请使用 a 。

于 2016-03-10T09:50:07.190 回答