1

基本的にラベルとボタンを組み合わせたカスタムコントロールがあります。現在、ユーザーが「Tab」を押すと、フォーカスがボタンに移動します。

フォーカスを受け取るコンポジットとフォーカスから除外するボタンを作成するにはどうすればよいですか?たとえば、ユーザーはボタンで停止するのではなく、すべてのカスタムコントロールをタブで移動できる必要があります。

更新:コントロールツリーは次のようになります。

  • メインペイン
    • CustomPanel1
      • ラベル
      • ボタン
    • CustomPanel2
      • ラベル
      • ボタン
    • CustomPanel3
      • ラベル
      • ボタン

すべてのCustomPanelは、同じCompositeサブクラスです。必要なのは、タブがこれらのパネル間を循環し、ボタンを「表示」しないことです(これらはフォーカス可能な唯一のコンポーネントです)

4

1 に答える 1

3

Compositeを使用して、のタブ順序を定義できますComposite#setTabList(Control[])

Buttonこれは、 sの間をタブで移動し、 soneと:をthree無視する小さな例です。Buttontwofour

public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(1, false));

    Composite content = new Composite(shell, SWT.NONE);
    content.setLayout(new GridLayout(2, true));
    content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    final Button one = new Button(content, SWT.PUSH);
    one.setText("One");

    final Button two = new Button(content, SWT.PUSH);
    two.setText("Two");

    final Button three = new Button(content, SWT.PUSH);
    three.setText("Three");

    final Button four = new Button(content, SWT.PUSH);
    four.setText("Four");

    Control[] controls = new Control[] {one, three};

    content.setTabList(controls);

    shell.pack();
    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}

編集:上記のコードは、要件に合わせて簡単に変換できます。Compositesはフォーカス可能ではないため、自分でテストすることはできませんが、次のアイデアを得る必要があります。

mainPane.setTabList(new Control[] {customPanel1, customPanel2, customPanel3 });

customPanel1.setTabList(new Control[] {});
customPanel2.setTabList(new Control[] {});
customPanel3.setTabList(new Control[] {});
于 2012-10-17T15:34:50.517 に答える