我尝试在SWT中创建一个检查按钮,但SWT.CHECK只有两个值:标记或未标记。
我希望我的复选框有三个值:unspecified,yes和no。是的将是一个V标记,不会是一个X标记。
我应该怎么做呢?我应该创建一个常规按钮(单击时)更改内部文本并创建一个圆形beaviour来改变nil-> v-> x-> nil-> ...?
谢谢
答案 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;
}
}
}