我有一個JTree
,我想向用戶展示一些描述,當他將鼠標懸停在樹節點上時。JTree與mousemotionlistener
我從文檔中看到,我們可以使用MouseMotionListener
。但是,我怎樣才能獲得鼠標移動到的節點的值?
任何指針都會非常有用。以獲得從MouseEvent
的節點的值
我有一個JTree
,我想向用戶展示一些描述,當他將鼠標懸停在樹節點上時。JTree與mousemotionlistener
我從文檔中看到,我們可以使用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)
{
...
}
});
但是,如果你想顯示你的描述作爲一個提示,然後該this solution可能更好地爲你。
看看在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;
}
,以便通過渲染器指定的提示文本受到尊重。
我想爲每個節點顯示一個工具提示。爲此,我需要確定哪些節點被盤旋,以及如何顯示工具提示。您有任何建議嗎? – bharz629
函數'path.getLastPathComponent()'將返回被懸停的節點。 JTree的'TreeCellRenderer'提供了節點的工具提示。按照帖子末尾的鏈接查看如何使用'TreeCellRenderer'來指定工具提示。 – cyon