Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何知道在GWT中鼠标悬停在哪个组件上?[爪哇]_Java_Gwt - Fatal编程技术网

Java 如何知道在GWT中鼠标悬停在哪个组件上?[爪哇]

Java 如何知道在GWT中鼠标悬停在哪个组件上?[爪哇],java,gwt,Java,Gwt,我有一个基于GWT的应用程序,当鼠标悬停在某个元素上时,我希望在该特定元素上激发getClass()方法,以便在TooTip中显示类名。我想为页面上的每个元素自动执行此过程。因此,如果我有一个方法,可以告诉我鼠标悬停在我的工作上的哪个元素将被完成。请帮忙。我有一个小程序,可以满足您的需要 其思想是递归地遍历小部件树(从父部件到所有子部件)。对于每个访问的小部件,您可以调用 widget.setTitle(widget.getClass().getName()); 将其类名显示为工具提示 代码如

我有一个基于GWT的应用程序,当鼠标悬停在某个元素上时,我希望在该特定元素上激发getClass()方法,以便在TooTip中显示类名。我想为页面上的每个元素自动执行此过程。因此,如果我有一个方法,可以告诉我鼠标悬停在我的工作上的哪个元素将被完成。请帮忙。

我有一个小程序,可以满足您的需要

其思想是递归地遍历小部件树(从父部件到所有子部件)。对于每个访问的小部件,您可以调用

widget.setTitle(widget.getClass().getName());
将其类名显示为工具提示

代码如下:

private void traverse(Widget widget) {
    widget.setTitle(widget.getClass().getName());
    if(widget instanceof HasWidgets) {
        Iterator<Widget> iter = ((HasWidgets) widget).iterator();
        while(iter.hasNext())
            traverse(iter.next());
    }
    else
        if(widget instanceof HasOneWidget)
            traverse(((HasOneWidget) widget).getWidget());
}
下面是在上运行此方法的结果的打印屏幕(注意工具提示显示
com.google.gwt.user.client.ui.PasswordTextBox
):


我有一个小程序,可以满足您的需要

其思想是递归地遍历小部件树(从父部件到所有子部件)。对于每个访问的小部件,您可以调用

widget.setTitle(widget.getClass().getName());
将其类名显示为工具提示

代码如下:

private void traverse(Widget widget) {
    widget.setTitle(widget.getClass().getName());
    if(widget instanceof HasWidgets) {
        Iterator<Widget> iter = ((HasWidgets) widget).iterator();
        while(iter.hasNext())
            traverse(iter.next());
    }
    else
        if(widget instanceof HasOneWidget)
            traverse(((HasOneWidget) widget).getWidget());
}
下面是在上运行此方法的结果的打印屏幕(注意工具提示显示
com.google.gwt.user.client.ui.PasswordTextBox
):


这是Adam的优秀答案的另一种选择,它的功能与Adam的完全相反-它没有查看每个小部件的根元素并对其进行调整,而是在整个文档上观察
鼠标悬停事件,并试图找出它在哪个小部件中,尽管我实际上没有实现工具提示,现在只需要一条console.log消息

原则是从事件发生的元素开始,检查每个父元素,直到发现一个小部件连接到它,然后记录该细节(或者,如果没有找到与此匹配的父元素,则停止)

这种方法有两个小优点:它不会更改每个小部件元素的
title
属性,甚至可以在最初设置后添加的小部件上工作,而不需要重新运行。缺点:这会对小部件的连接方式做出一些假设,使用GWT内部结构,而不是实际遍历g小部件层次结构,它可能会记录一些UIObject或其他事件处理程序(尽管这些很少是小部件以外的东西,如果确实不需要这种行为,可以添加一个小部件的
instanceof
检查)


这也可以很容易地在纯JS中实现,以允许检查使用小部件的正在运行的GWT应用程序-getEventListener只是在元素上查找
\Uu listener
属性,其他大多数行或多或少直接转换为JS
方法是唯一有问题的方法,这取决于应用程序的编译方式。

是Adam优秀答案的另一种选择,它以完全相反的方式构建,而不是查看每个小部件的根元素并对其进行调整,而是监视整个文档上的
鼠标悬停事件,并尝试找出哪个是它在一个小部件中,虽然我实际上没有实现工具提示,但目前只是一条console.log消息

原则是从事件发生的元素开始,检查每个父元素,直到发现一个小部件连接到它,然后记录该细节(或者,如果没有找到与此匹配的父元素,则停止)

这种方法有两个小优点:它不会更改每个小部件元素的
title
属性,甚至可以在最初设置后添加的小部件上工作,而不需要重新运行。缺点:这会对小部件的连接方式做出一些假设,使用GWT内部结构,而不是实际遍历g小部件层次结构,它可能会记录一些UIObject或其他事件处理程序(尽管这些很少是小部件以外的东西,如果确实不需要这种行为,可以添加一个小部件的
instanceof
检查)


这也可以很容易地在纯JS中实现,以允许检查使用小部件的正在运行的GWT应用程序-getEventListener只是在元素上查找
\Uu listener
属性,其他大多数行或多或少直接转换为JS
方法是唯一有问题的方法,具体取决于应用程序的编译方式。

这正是我想要的!谢谢。这为我节省了很多时间。这正是我想要的!谢谢。这为我节省了很多时间。