在SWT上创建3值检查按钮(未指定,是,否)

时间:2014-11-25 16:38:04

标签: java swt

我尝试在SWT中创建一个检查按钮,但SWT.CHECK只有两个值:标记或未标记。

我希望我的复选框有三个值:unspecified,yes和no。是的将是一个V标记,不会是一个X标记。

我应该怎么做呢?我应该创建一个常规按钮(单击时)更改内部文本并创建一个圆形beaviour来改变nil-> v-> x-> nil-> ...?

谢谢

2 个答案:

答案 0 :(得分:1)

SWT片段有三个状态按钮的示例: http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet293.java

使用下面的选择监听器,它会在选中时迭代灰色,检查和取消选中的状态。

button.addSelectionListener( new SelectionAdapter() {
  private int state;
  public void widgetSelected( SelectionEvent event ) {
    state++;
    if( state > 2 ) {
      state = 0;
    }
    Button button = ( Button )event.widget;
    switch( state ) {
      case 0:
        button.setSelection( false );
        button.setGrayed( false );
      break;
      case 1:
        button.setSelection( true );
        button.setGrayed( false );
      break;
      case 2:
        button.setSelection( true );
        button.setGrayed( true );
      break;
    }
  }
} );

答案 1 :(得分:0)

通常,您可以从按钮类继承。这门课程是最后的对接。这就是为什么在这里继承无效的原因。 您可以将带有按钮的类定义为局部变量。在构造函数中,创建Button。您的Class构造函数的构造函数与Button类具有相同的变量。通常情况下,复合和intStyle。 然后,您可以像第三状态一样向按钮添加更多属性。 如果需要表面上的按钮,则可以从属性中获取按钮。 请注意,它既快速又脏。清洁工作时,您不会把按钮退回去。然后,您必须在类中编写按钮的功能和属性。到目前为止,这是很多工作,因为您还没有继承。但是你可以做这样的事情。

import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;

public class MyThreeStateButton {
private int intStateLoc;
private Button buttonLoc;

    public MyThreeStateButton(Composite comParentIn, int intStyleIn) {

    buttonLoc = new Button(comParentIn, intStyleIn);

    intStateLoc= 0;
    buttonLoc.setSelection(true);
    buttonLoc.setGrayed(false);

    buttonLoc.addSelectionListener(new SelectionListener() {

        @Override
        public void widgetSelected(SelectionEvent e) {
            workState();

        }

        @Override
        public void widgetDefaultSelected(SelectionEvent arg0) {
            // TODO Auto-generated method stub

        }
    });
}

public Button getButton() {
    return buttonLoc;
}

public int getState() {
    return intStateLoc;
}

public void setState(int intStateIn) {
    intStateLoc= intStateIn-1;
    workState();
}

private void workState() {

    intStateLoc++;

    if (intStateLoc>2) {
        intStateLoc=0;
    }

    switch (intStateLoc) {

        case 0:
            buttonLoc.setSelection(true);
            buttonLoc.setGrayed(false);
            break;

        case 1:
            buttonLoc.setSelection(false);
            buttonLoc.setGrayed(false);
            break;

        case 2:
            buttonLoc.setSelection(true);
            buttonLoc.setGrayed(true);
            break;
    }
}
}