Java 在复合容器上启用焦点侦听器

Java 在复合容器上启用焦点侦听器,java,swt,composite,Java,Swt,Composite,我有四个按顺序排列的复合材料 每个组合都有一个复选框、标签和2个按钮。现在这些复合材料一个接一个地排列起来 我想启用对这些项目的关注,即当我使用tab从一个组合切换到另一个组合时,当前组合应该突出显示。理想情况下,我希望它的行为像一个列表,当你选择一个项目,然后得到突出显示。这可能吗 我知道composite充当了其他小部件、控件的容器。我的要求是我有一个包含5个条目的列表,列表中的每个条目都有一个复选框、标签和两个按钮。我也希望它能在他们被选中时得到关注 另外,请告诉我上述同一UI的替代解决方

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

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

我想启用对这些项目的关注,即当我使用tab从一个组合切换到另一个组合时,当前组合应该突出显示。理想情况下,我希望它的行为像一个列表,当你选择一个项目,然后得到突出显示。这可能吗

我知道composite充当了其他小部件、控件的容器。我的要求是我有一个包含5个条目的列表,列表中的每个条目都有一个复选框、标签和两个按钮。我也希望它能在他们被选中时得到关注


另外,请告诉我上述同一UI的替代解决方案。

要使选项卡从一个组合切换到另一个组合,请将每个组合的选项卡列表设置为一个控件,以便在选项卡之后具有焦点。例如,复选框:

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});
}
您能否提供一份帮助我们了解您的挑战的报告?