1
我知道我可以给Jtree添加一个mouseListener,但我需要双击他的一个元素和doSomething();如何在DefaultMutableTreeNode上获得鼠标侦听器?
我知道我可以给Jtree添加一个mouseListener,但我需要双击他的一个元素和doSomething();如何在DefaultMutableTreeNode上获得鼠标侦听器?
检查: -
public class NetworkTree extends JPanel implements TreeSelectionListener {
private JTree tree;
private static int PANEL_WIDTH=250;
private static int PANEL_HEIGHT=500;
private static String lineStyle = "Horizontal";
public NetworkTree() {
DefaultMutableTreeNode top = new DefaultMutableTreeNode(new Site(
1,1,"Network","",3));
getSubNodes(top,0);
tree = new JTree(top);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addTreeSelectionListener(this);
JScrollPane treeView = new JScrollPane(tree);
add(treeView);
tree.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent me) {
newNodeSelected();
}
});
}
.....
public void newNodeSelected() {
JOptionPane.showMessageDialog(null,"Hello");
}
..... }
如果你是兴趣检测双击事件或当 一个用户点击一个节点,不管它是否被选中,我们推荐你做以下操作:
final JTree tree = ...;
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
int selRow = tree.getRowForLocation(e.getX(), e.getY());
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if(selRow != -1) {
if(e.getClickCount() == 1) {
mySingleClick(selRow, selPath);
}
else if(e.getClickCount() == 2) {
myDoubleClick(selRow, selPath);
}
}
}
};
tree.addMouseListener(ml);
我仍然不知道为什么我需要selRow和selPath.I需要双次点击节点的name.Seems一样,如果我得到源,对象是一个JTree。 (我得到了类抛出异常) –
@AdrianStamin你点击的节点是你使用[selPath.getLastPathComponent()]获取的最后一个组件selPath'(http:// docs .oracle.com/javase/6/docs/api/javax/swing/tree/TreePath.html#getLastPathComponent()) – halex
谢谢,它的工作原理!我没有得到什么路径。 –