我实现了一个运行 menuItem 中显示的命令的 Web 应用程序。这些命令可能相互依赖,比如一个命令C依赖B,B依赖A执行C我们必须按照A->B->C的顺序执行。总之,我想改进我的反馈应用程序并在鼠标悬停在依赖它们的命令上时自动选择 menuItems。 在此先感谢您的帮助。 注意:我使用 GWT 2.3
最佳答案
不幸的是,gwt 提供的方法无法做到这一点。 MenuItem
是UiObject
的直接子类,它是Widget
继承的同一个父类(super class),但MenuItem 不是Widget。问题是所有的事件函数都是在 Widget 中定义的,而不是在 UiObject 中。
你可以尝试在你自己的项目中创建类com.google.gwt.user.client.ui.MenuItem
,从而“覆盖”gwt类,让它继承自Widget,复制将原来的 MenuItem 放入并实现必要的接口(interface)。不过,我不建议这样做。我什至为提及它而感到羞愧。
一个更优雅的解决方案是在您自己的包中创建一个 MyMenuItem 类。将 MenuItem 的内容复制给它,但让它继承自 Widget。然后,您在 .gwt.xml 中使用重新绑定(bind)规则将 MenuItem 替换为 MyMenuItem。只需记得在更改 GWT 版本时再次复制 MenuItem。
或者,您可以覆盖 MenuItem 并添加您自己的事件处理函数。您可以查看 Widget
及其子类(TextField、Button...)以了解必须如何完成。 Widget#addDomHandler
是一个不错的起点。它并不像听起来那么复杂 - 脏工作隐藏在 GWT 的 DOM
类中,Widget 类也使用该类。它主要是复制/粘贴。缺点是如果您想使用新的 GWT 版本并且需要重写您的类可能不再工作。
就我个人而言,我不会将这样的选择实现为即时鼠标悬停效果。这对新用户来说听起来不错,但作为有经验的用户,我会很生气。通常,菜单项在屏幕上分组,所以当我想要一个特定的菜单项时,大多数时候我也必须将鼠标悬停在其他项目上。导致菜单项闪烁 - 很烦人,尤其是当我已经做了一百次并且知道命令的依赖性时。我可以建议将它与计时器结合使用,以便在特定时间(例如 500 毫秒)后选择依赖项吗?有经验的用户点击速度足够快,不会被它打扰,新用户可以 - 如果需要 - 稍等片刻以获得额外的帮助。
哦,如果您真的想这样做 - 鼠标悬停是不够的。您还必须收听焦点事件 - 许多用户使用他们的键盘进行导航,这不会被鼠标悬停捕获,但会触发焦点事件。
关于java - [GWT]是否可以在MouseOver 上选择menuItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073337/