上面的代码有点乱,还有一个小疏忽(应该为叶节点时才弹出菜单),重贴一编:MouseListener treeMouseListener = new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger() &&tree.getRowForLocation(e.getX(), e.getY())!= -1) {
treeNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if (treeNode.isLeaf())
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
};
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger() &&tree.getRowForLocation(e.getX(), e.getY())!= -1) {
treeNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if (treeNode.isLeaf())
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
};
解决方案 »
- 能编译,但运行到一半死活没反应,求解!
- java NIO读出数据比写入数据少
- Exception in thread "main" java.lang.NullPointerException
- 用NetBeans编的桌面数据库程序生成jar后不能运行 求解!!
- 关于Class类的一个问题
- 请教高手,线程互斥怎么没起作用???
- 设定Timer定时器时,每次执行了两次任务!附上源代码,麻烦各位帮看看!
- 又是java日期转换的小问题 我搜了下也没合适的答案
- 请问现在最新的java版本是哪个?
- 写了几年的java,最近想再努力学习一下java,不知从何学起
- 在jdbTable 中,如何指定view中的主键?
- 在java里面怎么样获取一个窗体的句柄?
public void mouseReleased(MouseEvent e) {
if(e.isPopupTrigger() &&tree.getRowForLocation(e.getX(), e.getY())!= -1){
treeNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if (treeNode.isLeaf())
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
};这回应该差不多了吧?
{
treeNode=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
if (treeNode.isLeaf())
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
然后处理弹出
JTree tree = ...
tree.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (SwingUtilities.isRightMouseButton(e))
{
int selRow = formTree.getRowForLocation(x, y);
if (selRow != -1)
{
TreePath selPath = formTree.getPathForLocation(x, y);
if(selPath != null)
{
formTree.setSelectionPath(selPath);
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
}
}