请教下在这程序里我想在选定了最底层子结点是才出现右键菜单;还有在双击鼠标后弹出新的窗口,也就是下面dl类里面的窗口。请高手帮下忙!import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.tree.*;
import java.util.Date;
import java.util.*;public  class mainform extends JFrame{

private boolean expandItemOnSingleClick;
private int itemOpenOnButton;
PopupMenu popupMenu1 = new PopupMenu();
MenuItem menuItem1;
MenuItem menuItem2;
MenuItem menuItem3;
DefaultMutableTreeNode list;
DefaultMutableTreeNode myfd;
DefaultMutableTreeNode moshr;
DefaultMutableTreeNode bkname;
DefaultMutableTreeNode node1;
DefaultMutableTreeNode node2;
DefaultMutableTreeNode node3;
DefaultTreeModel tm0;
DefaultTreeModel tm1;
DefaultTreeModel tm2;
DefaultTreeModel tm3;
DefaultTreeCellRenderer cr;
JScrollPane sp;
JButton seek;
JTree  tree;
Container cn;

public mainform()
{ super("局域网聊天1.0版");
cn=this.getContentPane();
seek=new JButton("查找用户");
menuItem1 = new MenuItem();
menuItem2 = new MenuItem();
menuItem3 = new MenuItem();
list=new DefaultMutableTreeNode("联系人列表");
myfd=new DefaultMutableTreeNode("我的好友");
moshr=new DefaultMutableTreeNode("陌生人");
bkname=new DefaultMutableTreeNode("黑名单");
node1=new DefaultMutableTreeNode("[email protected]");
node2=new DefaultMutableTreeNode("[email protected]");
node3=new DefaultMutableTreeNode("[email protected]");
tm0=new DefaultTreeModel(list);
tm0.insertNodeInto(myfd,list,list.getChildCount());
tm0.insertNodeInto(moshr,list,list.getChildCount());
tm0.insertNodeInto(bkname,list,list.getChildCount());
tm1=new DefaultTreeModel(myfd);
tm1.insertNodeInto(node1,myfd,myfd.getChildCount());
tm2=new DefaultTreeModel(moshr);
tm2.insertNodeInto(node2,moshr,moshr.getChildCount());
tm3=new DefaultTreeModel(bkname);
tm3.insertNodeInto(node3,bkname,bkname.getChildCount());
tree=new JTree(tm0);
tree.setRowHeight(20);
cr=(DefaultTreeCellRenderer)tree.getCellRenderer();
cr.setLeafIcon(new ImageIcon(".\\Icons\\leaf.gif"));
cr.setOpenIcon(new ImageIcon(".\\Icons\\open.gif"));
cr.setClosedIcon(new ImageIcon(".\\Icons\\close.gif"));
sp=new JScrollPane();
sp.setViewportView(tree);
cn.add(sp,BorderLayout.CENTER);
cn.add(seek,BorderLayout.SOUTH); menuItem1.setLabel("发送消息");
menuItem1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {
menuItem1_actionPerformed(e);}}); //菜单1的事件监听
menuItem2.setLabel("查看资料");
menuItem2.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {
menuItem2_actionPerformed(e);}});
menuItem3.setLabel("删除此人");
menuItem3.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {
menuItem3_actionPerformed(e);}});
popupMenu1.add(menuItem1);
popupMenu1.add(menuItem2);
popupMenu1.add(menuItem3);
tree.add(popupMenu1);   
        tree.addMouseListener(new   MouseAdapter()   {   
            public   void   mouseReleased(MouseEvent   er)   {   
                try   {   
                    //是否右键单击   
                    if   (er.getClickCount()   ==   1   &&   SwingUtilities.isRightMouseButton(er))   {   
                        TreePath   path   =   tree.getLeadSelectionPath();   
                        if   (path   ==   null)   
                            return; 
                        tree.setSelectionPath(path);   
                        //if (er.getSource()==path.getLastPathComponent())
                        popupMenu1.show(tree,    er.getX(),   er.getY());   
                    }   
  
                    else   if   (er.getClickCount()   ==   1)   {   
                        TreePath   path   =   tree.getPathForLocation(er.getX(),   er.getY());   
                        if   (path   ==   null)   
                            return;   
                        if   (tree.isExpanded(path))   {   
                            tree.collapsePath(path);   
                        }   
                        else   {   
                            tree.expandPath(path);   
                        }   
                        return;   
                    }   
                }   
                catch   (Exception   ex)   {   
                    ex.printStackTrace();   
                }   
            }   
        }); 
pack();
setVisible(true);
}
/*public boolean checkClickTime() {
long nowTime = (new Date()).getTime(); if ( (nowTime - clickTime) < 300) {
clickTime = nowTime;
return true;
}
clickTime = nowTime;
return false;
} }
}*/
void menuItem1_actionPerformed(ActionEvent e) {
// 菜单事件1 
}
void menuItem2_actionPerformed(ActionEvent e) {
// 菜单事件2
}
void menuItem3_actionPerformed(ActionEvent e) {
// 菜单事件3
}
public static void main(String[] args) {
new mainform(); }}
class dl extends Thread implements ActionListener{
     TextArea ta1=new TextArea(20,50);
TextArea ta2=new TextArea(5,50);
JButton bt1=new JButton("聊天记录");
JButton bt2=new JButton("发送");
JButton bt3=new JButton("关闭");
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JPanel p4=new JPanel();
JFrame f=new JFrame("与 聊天中");
public dl()
{
ta1.setEditable(false);
Container contentPane=f.getContentPane();
p4.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.CYAN,Color.CYAN));
contentPane.add(p4);
        p4.setLayout(new BorderLayout());
p1.add(ta1);
p2.add(ta2);
p3.add(bt1);
p3.add(bt2);
p3.add(bt3);
p4.add("North",p1);
p4.add("Center",p2);
p4.add("South",p3);
bt1.addActionListener(this);
bt2.addActionListener(this);
bt3.addActionListener(this);
f.setSize(400,520);
f.setVisible(true);       
}
public void actionPerformed(ActionEvent e) 
{
if(e.getSource()==bt2){

ta1.append(ta2.getText()+"\n");
ta2.setText("");
}

if(e.getSource()==bt3)
System.exit(0);
}
}

解决方案 »

  1.   

    有一个 isLeaf() 判断是否叶子节点。
      

  2.   

    我觉得是在这几句里面改改就可以了,
    就不知道怎么改
        TreePath   path   =   tree.getPathForLocation(er.getX(),   er.getY());   
        if   (path   ==   null)   
             return; 
        tree.setSelectionPath(path);   
        popupMenu1.show(tree,    er.getX(),   er.getY());
      

  3.   

    TreePath   path   =   tree.getPathForLocation(er.getX(),   er.getY());TreeNode tn = (TreeNode)path.getLastPathComponent();if (tn.isLeaf()){
    ......
    }没在IDE里写,信手写来,可能有错。