Java 收音机菜单项生成SelectionListener两次-SWT

Java 收音机菜单项生成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

我有一个名为“radio”的顶级菜单,其中包含两个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
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){ 
            ....                   
        }
     }
 });