我有一个名为"radio"的顶级菜单,其中包含两个无线电MenuItem
。我把SelectionListener
都加进去。
MenuItem radio = new MenuItem(bar, SWT.CASCADE); /* bar is the menu bar */
radio.setText("Radio");
Menu menu = new Menu(radio);
radio.setMenu(menu);
MenuItem mntmOption_1 = new MenuItem(menu, SWT.RADIO);
mntmOption_1.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("Option 1 selected");
}
});
mntmOption_1.setText("Option1");
MenuItem mntmOption_2 = new MenuItem(menu, SWT.RADIO);
mntmOption_2.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
System.out.println("Option 2 selected");
}
});
mntmOption_2.setText("Option2");
首先我选择mntmOption_1
,它显示:
Option1 selected
然后我选择mntmOption_2
,它显示:
Option1 selected
Option2 selected
它似乎在解雇两个听众。问题来了:为什么?
它同时触发两个侦听器,因为第二个单选按钮失去了它的选择。如果您只想对特定的状态作出反应,则应该检查小部件的状态。
在实现的过程中,我遇到了swt单选按钮触发双事件监听器的选择和取消选择问题。
解决问题添加:
boolean isSelected = ((Button)e.getSource()).getSelection();
if(isSelected){
....
}
的例子:
buttonRd0 = new Button(parent, SWT.RADIO);
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e)
{
boolean isSelected = ((Button)e.getSource()).getSelection();
if(isSelected){
....
}
}
});