Java 带有mousemotionlistener的JTree
我有一个Java 带有mousemotionlistener的JTree,java,swing,tooltip,jtree,mouse-listeners,Java,Swing,Tooltip,Jtree,Mouse Listeners,我有一个JTree,我想在用户将鼠标悬停在树节点上时向用户显示一些描述 我从文档中看到,我们可以使用MouseMotionListener来实现这一点。但是,如何获得鼠标移动到的节点的值呢 任何指针都非常有用。从MouseEvent获取节点值的一种方法是获取鼠标x,y位置的TreePath,并从该路径获取最后一个路径组件 这可能看起来像这样: import javax.swing.tree.TreePath; import java.awt.event.MouseEvent; import ja
JTree
,我想在用户将鼠标悬停在树节点上时向用户显示一些描述
我从文档中看到,我们可以使用MouseMotionListener
来实现这一点。但是,如何获得鼠标移动到的节点的值呢
任何指针都非常有用。从
MouseEvent
获取节点值的一种方法是获取鼠标x,y位置的TreePath
,并从该路径获取最后一个路径组件
这可能看起来像这样:
import javax.swing.tree.TreePath;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JTree;
...
final JTree tree = new ...
tree.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e)
{
TreePath path = tree.getPathForLocation(e.getX(), e.getY());
if(path == null || path.getLastPathComponent() == null)
{
return;
}
Object nodeHoveredOver = path.getLastPathComponent();
System.out.println(path.getLastPathComponent());
}
@Override
public void mouseDragged(MouseEvent e)
{
...
}
});
但是,如果您希望将描述显示为工具提示,那么这对您来说可能会更好。请查看
JTree\getTooltipText
实现:
public String getToolTipText(MouseEvent event) {
String tip = null;
if(event != null) {
Point p = event.getPoint();
int selRow = getRowForLocation(p.x, p.y);
TreeCellRenderer r = getCellRenderer();
if(selRow != -1 && r != null) {
TreePath path = getPathForRow(selRow);
Object lastPath = path.getLastPathComponent();
Component rComponent = r.getTreeCellRendererComponent
(this, lastPath, isRowSelected(selRow),
isExpanded(selRow), getModel().isLeaf(lastPath), selRow,
true);
if(rComponent instanceof JComponent) {
//...
tip = ((JComponent)rComponent).getToolTipText(newEvent);
}
}
}
// No tip from the renderer get our own tip
if (tip == null) {
tip = getToolTipText();
}
return tip;
}
因此,尊重渲染器指定的工具提示文本。我想为每个节点显示工具提示。为此,我需要确定悬停在哪个节点上以及如何显示工具提示。您有什么建议吗?函数
path.getLastPathComponent()
将返回悬停在其上的节点。JTree
的TreeCellRenderer
为节点提供工具提示。按照文章末尾的链接查看如何使用TreeCellRenderer
指定工具提示。