以下是JTree的事件响应:
d_tree.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
但是没有鼠标双击树子节点时才进行事件响应的虚函数,请问如何实现?
d_tree.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e){
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
但是没有鼠标双击树子节点时才进行事件响应的虚函数,请问如何实现?
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
TreeNode node=(TreeNode)evt.getPath().getLastPathComponent();
if(node.isLeaf()){
//do something
}
}
});
加个全局的用来标识双击的标志位flag,给tree加上mouseClicked监听,双击的话flag为ture,其他的为false, tree.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
if(evt.getModifiers()==InputEvent.BUTTON1_MASK && evt.getClickCount()==2){
flag=true;
}else{
flag=false;
}
}
}); 在 if(node.isLeaf()){
//do something
}多加一个判断:if(node.isLeaf() && flag){
flag=true;
//do something
}应该可以了
我添加了打印消息在里面,发现两个监听器并非addMouseListener先监听到事件的。
看来问题还没搞定哈~
tree.addMouseListener(new FilePopupListener());
.....
private class FilePopupListener extends MouseAdapter
{
public void mousePressed(MouseEvent me)
{
int n=tree.getRowForLocation(me.getX(),me.getY());
if(n<0) return ;
TreePath selTree=tree.getPathForRow(n);
DefaultMutableTreeNode selNode=(DefaultMutableTreeNode)selTree.getLastPathComponent();
if(selNode.isLeaf())
{
if(SwingUtilities.isRightMouseButton(me))
leaf.show(tree,me.getX(),me.getY());
}
else
{
if(SwingUtilities.isRightMouseButton(me))
parent.show(tree,me.getX(),me.getY());
}
}
}
// TODO Auto-generated method stub
if(e.getClickCount()==2) // 表示鼠标双击
System.out.println("mouse 双击了");
}