将监听器添加到下拉菜单中

时间:2012-12-25 22:34:01

标签: java combobox swt

所以我有一个下面的下拉菜单:

new Label(shell, SWT.NONE).setText("Bet Type:");
betType = new Combo(shell, SWT.SINGLE | SWT.BORDER);
betType.setItems(new String[] {"   ", "NFL", "NBA", "CFB"});
betType.setLayoutData(gridData);

我想要的是当某人选择其中一个下拉选项时,我将稍后调用一个函数。

我尝试过这样的事情:

betType.addSelectionListener(new SelectionAdapter()) { ... }

或者:

betType.addSelectionListener(new SelectionListener()) { ... }

或者:

betType.addModifyListener(new ModifyListener()) { ... }

我不断收到错误,说“无法实例化类型ModifyListener或SelectionListener”等。如何纠正此问题呢?

1 个答案:

答案 0 :(得分:3)

您的代码存在的问题是您过早关闭了第一个( - 括号。

此:

betType.addSelectionListener(new SelectionListener()) { ... }

应该是:

betType.addSelectionListener(new SelectionListener() { ... });

以下代码完全符合您的要求:

public static void main(String[] args)
{
    Display d = new Display();
    final Shell shell = new Shell(d);
    shell.setLayout(new GridLayout(1, false));

    new Label(shell, SWT.NONE).setText("Bet type:");

    final Combo betType = new Combo(shell, SWT.SINGLE | SWT.BORDER);
    betType.setItems(new String[] {"   ", "NFL", "NBA", "CFB"});

    betType.addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event arg0)
        {
            System.out.println(betType.getText());
        }
    });


    shell.pack();
    shell.open();
    while (!shell.isDisposed())
        while (!d.readAndDispatch())
            d.sleep();
}

或者,这也有效:

betType.addSelectionListener(new SelectionListener()
{
    @Override
    public void widgetSelected(SelectionEvent arg0)
    {
        System.out.println(betType.getText());
    }

    @Override
    public void widgetDefaultSelected(SelectionEvent arg0)
    {
    }
});