Java 收音机菜单项生成SelectionListener两次-SWT
我有一个名为“radio”的顶级菜单,其中包含两个radioJava 收音机菜单项生成SelectionListener两次-SWT,java,swt,menuitem,Java,Swt,Menuitem,我有一个名为“radio”的顶级菜单,其中包含两个radioMenuItem。我为两者添加了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 mntmOp
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
Option1 selected
Option2 selected
然后我选择mntmOption_2
它显示:
Option1 selected
Option1 selected
Option2 selected
这似乎是解雇两个听众。问题是:为什么?我正在运行WinXP。它正在启动两个侦听器,因为第二个单选按钮松开了它的选择。如果只想对特定状态做出反应,则应该检查小部件状态。在实现时,我遇到了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){
....
}
}
});