gpt4 book ai didi

gwt - GWT 树的工具提示 : adding mouseovers to nodes

转载 作者:行者123 更新时间:2023-12-01 11:06:15 25 4
gpt4 key购买 nike

我正在尝试为 GWT 中的树节点添加工具提示。因此,我想为树的节点而不是树本身添加一个鼠标悬停监听器。

Treelistener 接口(interface)似乎是我想要的,但现在已弃用它来代替处理程序系统。我不太明白如何在单元格上获得鼠标悬停行为,因为我似乎只能将 MouseOverHandler 添加到树本身。

如有任何帮助,我们将不胜感激。

最佳答案

因为我还没有在 GWT 中实际使用过 Tree,所以在这里我要稍微说一下,但是我看到 TreeItem 类是UIObject 的子类。任何 UIObject 都可以调用其 setTitle() 方法。在幕后,此方法将标准 HTML 标题属性设置为您传递给 setTitle() 的任何字符串。

这应该会为您提供所需的工具提示行为。作为额外的好处,浏览器会为您处理所有鼠标事件:

import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;

public class TreeTest extends Composite {

public TreeTest() {
Tree root = new Tree();
initWidget(root);
TreeItem dogs = new TreeItem("canines");
dogs.addItem("Fido").setTitle("faithful");
dogs.addItem("Lassie").setTitle("starlet");
dogs.addItem("Touser").setTitle("ruthless killer");
root.addItem(dogs);

TreeItem cats = new TreeItem("felines");
cats.addItem("Boots").setTitle("needy");
cats.addItem("Fabio").setTitle("aloof");
cats.addItem("Mandu").setTitle("bob seger");
root.addItem(cats);
}


}

编辑:现在让我们假设您不想使用上述浏览器的内置工具提示机制,而您想自己处理鼠标事件。

从表面上看,

TreeItem 可能看起来像一个非启动器。毕竟,它直接继承自 UIObject 而不是 Widget。 (Widget 添加到 UIObject 的关键区别毕竟是处理事件的能力。所以有人会认为我们不能向 TreeItem 添加处理程序!)

虽然这完全正确,但请注意 TreeItem 为我们提供了以下构造函数:

public TreeItem(Widget widget)

当我们创建每个实例时,然后,我们可以将一个真正的 Widget 传递给它(例如 Label,也许,或者您自己的 class MyWidget extends Composite),我们可以直接向其添加事件处理程序:

    import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.event.dom.client.MouseOverHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.TreeItem;

public class AnotherTreeTest extends Composite {

public AnotherTreeTest() {
Tree root = new Tree();
initWidget(root);
TreeItem dogs = new TreeItem("canines");
makeItem(dogs,"Fido","faithful");
makeItem(dogs,"Lassie","starlet");
makeItem(dogs,"Touser","ruthless killer");
root.addItem(dogs);

TreeItem cats = new TreeItem("felines");
makeItem(cats,"Boots","needy");
makeItem(cats,"Fabio","aloof");
makeItem(cats,"Mandu","bob seger");
root.addItem(cats);
}

private void makeItem(TreeItem parent, String name, final String tip) {
Label label = new Label(name);
TreeItem animal = new TreeItem(label);
label.addMouseOverHandler(new MouseOverHandler() {

@Override
public void onMouseOver(MouseOverEvent event) {
GWT.log("mouse over " + tip); // do something better here
}

});
label.addMouseOutHandler(new MouseOutHandler() {

@Override
public void onMouseOut(MouseOutEvent event) {
GWT.log("mouse out " + tip); // do something better here
}

});
parent.addItem(animal);
}

}

请注意,可能还有其他成本较低的方法可以实现此目的。如果您有一棵巨大的树,那么为每个节点创建一个 Widget 的成本会很高。然后您可能想探索一种更复杂的方式来处理您的鼠标事件,也许是通过一个处理程序来检查它在哪个元素中。

关于gwt - GWT 树的工具提示 : adding mouseovers to nodes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com