Java 当复选框在复合控件中与单选按钮分组时,如何设置其焦点
我已经创建了具有复选框和两个单选按钮的复合控件。这类似于使用复选框控制单选按钮,即只有选中复选框后才能启用收音机 我想在页面出现时(使用CTRl+TAB组合遍历)将焦点设置在复选框上,在没有启用任何单选按钮的情况下,它可以正常工作 如果选择了任何单选按钮,则焦点将指向该单选按钮,而不是选中的框。这是windows默认行为吗,焦点应位于所选单选按钮?? 如何使焦点始终在复选框上?? 我尝试使用setFocus on复选框,但没有用 这三个按钮都在一个组中 下面是示例代码Java 当复选框在复合控件中与单选按钮分组时,如何设置其焦点,java,eclipse-plugin,swt,Java,Eclipse Plugin,Swt,我已经创建了具有复选框和两个单选按钮的复合控件。这类似于使用复选框控制单选按钮,即只有选中复选框后才能启用收音机 我想在页面出现时(使用CTRl+TAB组合遍历)将焦点设置在复选框上,在没有启用任何单选按钮的情况下,它可以正常工作 如果选择了任何单选按钮,则焦点将指向该单选按钮,而不是选中的框。这是windows默认行为吗,焦点应位于所选单选按钮?? 如何使焦点始终在复选框上?? 我尝试使用setFocus on复选框,但没有用 这三个按钮都在一个组中 下面是示例代码 Composite
Composite composite = this;
GridData LData = new GridData();
LData.horizontalSpan = 1;
LData.horizontalAlignment = GridData.FILL;
LData.grabExcessHorizontalSpace = true;
LData.verticalAlignment = GridData.FILL;
LData.grabExcessVerticalSpace = true;
composite.setLayoutData(LData);
composite.setLayout(new GridLayout(1, false));
Label infoLabel = new Label(composite, SWT.NONE);
infoLabel.setText("Test");
rGroup = new Group(composite, SWT.NONE);
GridData rGroupLData = new GridData();
rGroupLData.grabExcessHorizontalSpace = true;
rGroupLData.horizontalAlignment = GridData.FILL;
rGroup.setLayoutData(rGroupLData);
GridLayout rGroupLayout = new GridLayout(5, false);
rGroup.setLayout(rGroupLayout);
checkBox1 = new Button(rGroup, SWT.CHECK);
checkBox1.setText("CheckBox");
GridData rcheckBox1LData = new GridData();
rcheckBox1LData.horizontalSpan = 5;
rcheckBox1LData.verticalAlignment = GridData.CENTER;
rcheckBox1LData.grabExcessHorizontalSpace = true;
rcheckBox1LData.horizontalAlignment = GridData.FILL;
checkBox1.setLayoutData(rcheckBox1LData);
GridData r1LData = new GridData();
r1LData.horizontalAlignment = GridData.CENTER;
r1LData.grabExcessHorizontalSpace = true;
r1LData.verticalAlignment = GridData.CENTER;
r1Numeric = new Button(rGroup, SWT.RADIO);
r1Numeric.setText("Radio1");
r1Numeric.setSelection(true);
r1Numeric.setLayoutData(r1LData);
r1Numeric.setEnabled(false);
GridData selR1LData = new GridData();
selR1LData.horizontalAlignment = GridData.CENTER;
selR1LData.grabExcessHorizontalSpace = true;
selR1LData.verticalAlignment = GridData.CENTER;
selR1Value = new Button(rGroup, SWT.NONE);
selR1Value
.setText("Select R1");
selR1Value.setLayoutData(selR1LData);
selR1Value.setEnabled(false);
GridData r2LData = new GridData();
r2LData.horizontalAlignment = GridData.CENTER;
r2LData.grabExcessHorizontalSpace = true;
r2LData.verticalAlignment = GridData.CENTER;
r2Numeric = new Button(rGroup, SWT.RADIO);
r2Numeric.setText("Radio2");
r2Numeric.setLayoutData(r2LData);
r2Numeric.setSelection(false);
r2Numeric.setEnabled(false);
GridData selR2LData = new GridData();
selR2LData.horizontalAlignment = GridData.CENTER;
selR2LData.grabExcessHorizontalSpace = true;
selR2LData.verticalAlignment = GridData.CENTER;
selR2Value = new Button(rGroup, SWT.NONE);
selR2Value
.setText("Select R2");
selR2Value.setLayoutData(selR2LData);
selR2Value.setEnabled(false);
由于提供的代码与您机器上的代码不完全相同,我无法重现您的问题,但在这里我可以遍历所有组件 无论如何,您可以设置组件的选项卡顺序。根据您的示例,尝试在创建所有内容后添加以下代码:
rGroup.setTabList( new Control[] { checkBox1, r1Numeric, selR1Value, r2Numeric, selR2Value } );
除此之外,如果存在,您还可以实现页面的
setFocus
方法,使其在复选框上设置焦点。您能否提供用于创建组件的代码(不仅是复选框和单选按钮,还包括同一页面上的其他组件)?添加了示例代码。除此之外,我对每个按钮都使用selectionListeners。这又是一个需要粘贴的巨大代码。谢谢,我在小组中引入了另一个组合。