如何在swt组合框中的项目上跟踪鼠标(热跟踪)

vlju58qv  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(289)

我有一个组合框,显示各种项目。我想根据鼠标指针下的项目更改工具提示文本。由于无法为每个项目设置工具提示,因此需要更改组合框的工具提示。
如何在鼠标指针下获取项目?我可以设置一个跟踪鼠标移动的事件,然后获取鼠标的点,但是我找不到一个方法来获取组合中与点位置匹配的项。
一棵树有这样的特点:

private class KeyTreeMouseMoveListener implements MouseMoveListener
{
    @Override
    public void mouseMove( MouseEvent event )
    {
       TreeItem item = tree.getItem( new Point( event.x, event.y ) );
    }
}

但是我找不到一个组合框的类似方法。
比如:

private class ComboMouseMoveListener implements MouseMoveListener
{
    @Override
    public void mouseMove( MouseEvent event )
    {
       int index = combo.getIndex( new Point( event.x, event.y ) );
    }
}

太好了:-)

ss2ws0br

ss2ws0br1#

好吧,这有点难看,也有点不好的做法,所以不要在家里尝试这个。。。

private class ComboModifyListener implements ModifyListener
{
    @Override
    public void modifyText( ModifyEvent e )
    {
      <code to get the selected item>
      combo.setToolTipText( "item tooltip text" );

      // ugly part
      ivShell.getDisplay().setCursorLocation(
        ivShell.getLocation().x + combo.getLocation().x + 15,
        ivShell.getLocation().y + combo.getLocation().y + 35 );
    }
}

因此,在用户选择一个项目后,我获取该项目,设置组合工具提示,然后移动光标,使其现在位于组合框上。这个 x + 15 以及 y + 35 是从组合框的左上角开始的swag偏移。
是的,我知道在程序控制下移动光标是不好的做法,但是它确实显示了所选项目的工具提示。

相关问题