请教下在这程序里我想在选定了最底层子结点是才出现右键菜单;还有在双击鼠标后弹出新的窗口,也就是下面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);
}
}
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);
}
}
就不知道怎么改
TreePath path = tree.getPathForLocation(er.getX(), er.getY());
if (path == null)
return;
tree.setSelectionPath(path);
popupMenu1.show(tree, er.getX(), er.getY());
......
}没在IDE里写,信手写来,可能有错。