在SWT调焦复合(Focusable composite in SWT)

2019-09-24 04:50发布

我们有一个自定义的控件,本质上是一种复合材料标签和一个按钮。 目前,当用户按下“TAB”重点谈到按钮。

我怎样才能使复合接收焦点和按钮从重点排除? 例如,用户应该能够通过标签所有自定义控件和按钮不会停止。

更新:我们的控件树是这个样子:

  • 主面板
    • CustomPanel1
      • 标签
      • 按键
    • CustomPanel2
      • 标签
      • 按键
    • CustomPanel3
      • 标签
      • 按键

所有CustomPanel的是相同的复合子类。 我们需要的是对标签这些面板之间的周期,不“看”按钮(这些是唯一可获得焦点的组件)

Answer 1:

可以定义的标签顺序Composite通过使用Composite#setTabList(Control[])

这里是一个小例子将在之间进行切换Button小号onethree忽略Button小号twofour

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();
}

编辑 :上面的代码可以很容易地转换为适合您的需求。 我不能测试它自己,因为Composite s的不集中,能,但你应该得到的想法:

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

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


文章来源: Focusable composite in SWT
标签: eclipse swt