单选菜单项生成SelectionListener两次 - SWT

时间:2011-12-06 09:40:11

标签: java swt menuitem

我有一个名为“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。

2 个答案:

答案 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){ 
            ....                   
        }
     }
 });