1

私はさまざまなページなどを含むJava SWTデスクトップアプリケーションを持っています.pp。タブオーダーを除いて、まったく問題なく動作します。「フィールド 1」でキーボードの Tab キーを押すと、アプリケーションが「フィールド 2」にジャンプするようにしたいので、最初のフィールドに情報を入力した後に 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 に答える