无线电菜单项生成两次选择监听器- SWT



我有一个名为"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){ 
            ....                   
        }
     }
 });

最新更新