我有一个名为“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
似乎它正在解雇两个听众。这是一个问题:为什么?我正在运行WinXP。
答案 0 :(得分:9)
它正在触发两个侦听器,因为第二个单选按钮失去了它的选择。如果您只想对特定状态做出反应,则应检查窗口小部件状态。
答案 1 :(得分:2)
在实施时,我遇到了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){
....
}
}
});