2

我有四个按顺序排列的复合材料。

每个组合都有一个复选框、标签和 2 个按钮。现在这些复合材料一个接一个地对齐。

我想启用对这些项目的关注,即当我使用tab从一个合成转到另一个时,当前合成应该看起来突出显示。理想情况下,我希望它表现得像一个列表,当您选择一个项目时,它会被突出显示。这可能吗?

我了解复合材料充当其他小部件、控件的容器。我的要求是我有一个包含 5 个条目的列表,并且列表中的每个项目都有一个复选框、标签和两个按钮。我还希望在选择它们时关注它。

另外,请让我知道我上面描述的相同 UI 的替代解决方案。

4

1 回答 1

1

要使选项卡从组合变为组合,请将每个组合的选项卡列表设置为您希望在选项卡之后获得焦点的一个控件。例如,复选框:

composite.setTabList(new Control[]{checkButton});

要成为亮点,您的想象力就是极限。你可以改变背景,添加一些边框,你可以命名它。只要组合中的一个控件获得焦点,您只需更新它。

这是一个完整的例子:

public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout(SWT.VERTICAL));

    createElement(shell);
    createElement(shell);
    createElement(shell);
    createElement(shell);

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

private static void createElement(final Composite parent) {
    final Composite composite = new Composite(parent, SWT.BORDER);
    composite.setLayout(new GridLayout(4, false));
    final Button checkButton = new Button(composite, SWT.CHECK);
    new Label(composite, SWT.NONE);
    final Button button1 = new Button(composite, SWT.PUSH);
    final Button button2 = new Button(composite, SWT.PUSH);
    Listener listener = new Listener() {
        @Override
        public void handleEvent(Event event) {
            for (Control control : parent.getChildren()) {
                control.setBackground(null);
            }
            composite.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_RED));
            if (event.widget == button1 || event.widget == button2) {
                checkButton.setFocus();
            }
        }
    };
    checkButton.addListener(SWT.FocusIn, listener);
    button1.addListener(SWT.FocusIn, listener);
    button2.addListener(SWT.FocusIn, listener);
    composite.setTabList(new Control[]{checkButton});
}
于 2013-10-18T15:57:51.903 回答