2

我有一个JTree,当他将鼠标悬停在树节点上时,我想向用户显示一些描述。

我从文档中读到我们可以使用MouseMotionListener它。但是我怎样才能得到鼠标移动到的节点的值呢?

任何指针都会非常有用。

4

2 回答 2

2

MouseEvent从中获取节点值的一种方法是获取TreePath鼠标的 x,y 位置的 a 并从此路径获取最后一个路径组件。

这可能看起来像这样:

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)
        {
            ...                
        }
});

但是,如果您想将您的描述显示为工具提示,那么此解决方案可能更适合您。

于 2012-10-22T10:10:34.207 回答
1

看一下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;
}

因此,渲染器指定的工具提示文本受到尊重。

于 2012-10-22T10:40:10.783 回答