请考虑以下代码:
public class SWTTest {
public static void main(String[] args) {
Display display=new Display();
Shell shell=new Shell(display, SWT.DIALOG_TRIM);
Group group=new Group(shell, SWT.SHADOW_ETCHED_OUT);
group.setText("A group");
Button[] options=new Button[2];
options[0]=new Button(group, SWT.RADIO);
options[0].setText("Option 1");
options[0].setLocation(5, 20);
options[0].pack();
options[1]=new Button(group, SWT.RADIO);
options[1].setText("Option 2");
options[1].setLocation(5, 50);
options[1].pack();
options[0].addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("Option 1 Selected");
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
});
group.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
我的意图是,只要选择了选项1,就会调用widgetSelected(SelectionEvent e)
方法,然后 ,但问题是选择选项2 也调用widgetSelected(SelectionEvent e)
方法,即使我没有提交选项2作为监听器,也没有为它实现widgetSelected(SelectionEvent e)
方法。
那么这里发生了什么,我如何为不同的选项选择定义不同的行为?
哦......还有一件事......
如果我对实现widgetDefaultSelected(SelectionEvent e)方法不感兴趣怎么办?我应该这样离开吗?
答案 0 :(得分:1)
正如 Edward Thomson 在评论中提到的那样, SelectionEvent 会在按钮 上触发选择以及取消选择。
您的 EventListener 应该检查按钮状态:
button.getSelection() // return true if the button is selected
这就是我通常的做法:
Button button = new Button(parent , SWT.RADIO);
button.addSelectionListener(new SelectionAdapter(){
@override
public void widgetSelected(final SelectionEvent e){
super.widgetSelected();
if(button.getSelection()){
//do your processing
}
}
});