2

JTreeユーザーがツリー ノードの上にマウスを置いたときに、ユーザーに説明を表示したいと考えています。

これに を使用できるドキュメントを読みましMouseMotionListenerた。しかし、マウスが移動したノードの値を取得するにはどうすればよいでしょうか?

どんなポインタも非常に役に立ちます。

4

2 に答える 2

2

からノードの値を取得する 1 つの方法MouseEventTreePath、マウスの x、y 位置の を取得し、このパスから最後のパス コンポーネントをフェッチすることです。

これは次のようになります。

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 に答える