【问题标题】:How to set focus on a checkbox when it is grouped with radio buttons inside a composite control当复选框与复合控件内的单选按钮分组时如何将焦点设置在复选框上
【发布时间】:2013-06-07 00:26:15
【问题描述】:

我创建了具有复选框和两个单选按钮的复合控件。这类似于使用复选框控制单选按钮,即只有在选中复选框后才会启用单选按钮

我想在页面出现时将焦点设置在复选框上(使用 CTRl+TAB 进行复合遍历),在没有启用任何单选按钮的情况下它可以正常工作。

如果选择了任何单选按钮,则焦点将转到该单选按钮而不是 选中 框。这是 Windows 默认行为,焦点应该在选定的单选按钮上吗? 我怎样才能让焦点始终放在复选框上? 我尝试在复选框上使用 setFocus,但没有帮助。

所有这三个按钮都在一个组中。

这里是示例代码

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

【问题讨论】:

  • 能否提供用于创建组件的代码(不仅是检查和单选按钮,还包括同一页面上的其他组件)?
  • 添加了示例代码。除此之外,我为每个按钮使用 selectionListeners。这将是再次粘贴大量代码。

标签: java eclipse-plugin swt


【解决方案1】:

鉴于提供的代码与您机器上的代码不完全相同,我无法重现您的问题,但在这里我可以遍历所有组件。

无论如何,您可以设置组件的 Tab 键顺序。根据您的示例,在创建所有内容后尝试添加此代码:

rGroup.setTabList( new Control[] { checkBox1, r1Numeric, selR1Value, r2Numeric, selR2Value } );

除此之外,如果存在,您还可以实现页面的setFocus 方法,使其将焦点设置在复选框上。

【讨论】:

  • 谢谢,我是通过在组中介绍另一个复合材料来实现的。
猜你喜欢
  • 2016-08-15
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
相关资源
最近更新 更多