Я собираюсь немного подсунуть свою шею, поскольку я еще не использовал Tree
в GWT, но я вижу, что класс 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
для каждого узла может стать дорогостоящим. Тогда вы можете захотеть изучить более изощренный способ обработки событий мыши, возможно, имея один обработчик, который проверяет, в каком элементе он находится.