【问题标题】:Event notification if SWT Combo display list is visibleSWT Combo 显示列表可见时的事件通知
【发布时间】:2015-11-24 16:09:58
【问题描述】:

我正在检查一个指示组合显示列表是否打开的事件,但没有看到任何内容。

我想到了一个鼠标向下/向上事件挂钩,但我很快意识到用户按下并释放鼠标以显示列表。此外,还可以使用键盘。

我看到了this article,它说要使用getListVisible() 方法,但是那会是某种计时器。鼠标抬起事件对于执行检查来说不是很准确,而计时器对于简单的任务来说似乎是一种过大的杀伤力。

cboServers = new Combo(this.cmptLogHtsControl, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
cboServers.addMouseListener(new MouseAdapter()
{
    @Override
    public void mouseDown(MouseEvent arg0)
    {
    }
    @Override
    public void mouseUp(MouseEvent arg0)
    {
    }
});
gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
gridData.widthHint = 300;
cboServers.setLayoutData(gridData);
this.cboServers.addSelectionListener(new SelectionAdapter()
{
    @Override
    public void widgetSelected(SelectionEvent arg0)
    {
    }
});

我错过了什么吗?想法?

【问题讨论】:

    标签: java list events combobox swt


    【解决方案1】:

    由于弹出是由本机控件完成的,因此可能没有任何方法可以看到。

    查看 Mac OS X 上 Combo 的实现 getListVisible() 是使用特定于 OS X 且未在 SWT API 中公开的事件完成的。

    【讨论】:

    • 这意味着我的问题中提到的问题 14579847 中给出的答案不是真正的答案,因为它违反了 WORA 规则。这也意味着我需要编写自己的下拉列表。 .Net 更好,因为该框架公开了这些关键事件(显示和隐藏显示列表)。
    • CCombo 控件完全是使用其他 SWT 控件编写的,您可以使用所需的事件复制它。 getListVisible() 确实可以在所有平台上运行,但在每个平台上它的实现方式非常不同。
    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多