我有四个复合 Material 按顺序排列。
每个组合都有一个复选框、标签和 2 个按钮。现在这些复合 Material 一个接一个地对齐。
我想启用对这些项目的关注,即当我使用 tab 从一个复合 Material 转到另一个复合 Material 时,当前复合 Material 应该突出显示。理想情况下,我希望它表现得像一个列表,当你选择一个项目时,它就会被突出显示。这可能吗?
我知道组合充当其他小部件、控件的容器。我的要求是我有一个包含 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});
}
关于java - 在复合容器上启用焦点监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420464/