swing·通讯录项目预备知识之JTree---节点右键弹出菜单
首先来介绍JTree中的getPathForLocation和setSelectionPath方法
均为API中的介绍:
1. public TreePath getPathForLocation(int x, int y)
返回指定位置处的节点路径。
- 参数:
x
- 提供水平像素数的整数,从显示区域左边开始减去左边距y
- 提供垂直像素数的整数,从显示区域顶部开始减去顶边距- 返回:
- 该位置处节点的
TreePath
- 2.关于返回值TreePath
- API中的介绍:
- public class TreePath extends Object implements Serializable
- 表示节点的路径。
- 3.
- public void setSelectionPath(TreePath path)
- 择指定路径标识的节点。
- 参数:
path
- 指定要选择的节点的TreePath
- 然后介绍SwingUtilities类的isRightMouseButton方法
- public static boolean isRightMouseButton(MouseEvent anEvent)
- 如果鼠标事件指定右边鼠标按键,则返回 true。
- 参数:
anEvent
- 一个 MouseEvent 对象- 返回:
- 如果右边鼠标按键处于活动状态,则返回 true
- 4.接下来,实现节点右键直接弹出菜单
1 private javax.swing.JMenuItem jm_about; 2 private javax.swing.JMenuItem jm_addGroup; 3 private javax.swing.JMenuItem jm_deleteGroup; 4 private javax.swing.JMenu jm_function; 5 private javax.swing.JMenu jm_help; 6 private javax.swing.JMenuItem jm_toUse; 7 private javax.swing.JTree jtree_group; 8 ....................................................................... 9 jtree_group = new javax.swing.JTree(); 10 jMenuBar1 = new javax.swing.JMenuBar(); 11 jm_function = new javax.swing.JMenu(); 12 jm_addGroup = new javax.swing.JMenuItem(); 13 jm_deleteGroup = new javax.swing.JMenuItem(); 14 jm_help = new javax.swing.JMenu(); 15 jm_about = new javax.swing.JMenuItem(); 16 jm_toUse = new javax.swing.JMenuItem(); 17 ......................................................................... 18 jm_function.add(jm_addGroup); 19 jm_function.add(jm_deleteGroup); 20 jMenuBar1.add(jm_function); 21 JPopupMenu jpm1; 22 jm_help.add(jm_about); 23 jm_help.add(jm_toUse); 24 jMenuBar1.add(jm_help); 25 26 public testJTreeFrm() { 27 initComponents(); 28 jpm1 = new JPopupMenu(); 29 jpm1.add(this.jm_function); 30 jpm1.addSeparator();//添加分隔符 31 jpm1.add(this.jm_help); 32 } 33 .......................................................................... 34 private void jtree_groupMousePressed(java.awt.event.MouseEvent evt) { 35 // TODO add your handling code her 36 int mods = evt.getModifiers(); 37 if (SwingUtilities.isRightMouseButton(evt)) { 38 // int selRow = jtree_group.getRowForLocation(evt.getX(), evt.getY()); 39 // if(selRow != -1){ 40 TreePath selPath = jtree_group.getPathForLocation(evt.getX(), evt 41 .getY()); 42 if (selPath != null) { 43 jtree_group.setSelectionPath(selPath); 44 // jpm1.show(this, evt.getX(), evt.getY()); 45 jpm1.show(evt.getComponent(), evt.getX(), evt.getY()); 46 //这里最好用第二条语句,可以获得更好的用户体验 47 } 48 // } 49 } 50 }