在QQ裡面我們要跟好友進行通訊,選擇好友所在的組,雙擊好友選項,彈出聊天的對話方塊,這裡我們就要實現這個步驟,在之前顯示好友名單的功能裡面我使用的是JTree組件,所以我們顯示的也就是一個樹形結構,分為根節點,枝節點,分葉節點,而要彈出框的節點就是分葉節點,所有當我們雙擊功能的時候,要進行判斷。
tree = new JTree(top); tree.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2){ DefaultMutableTreeNode note=(DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(note.isRoot()){ System.out.println("root "+note.toString()); }else if(note.isLeaf()){ System.out.println("分葉節點 "+note.toString()); }else{ System.out.println("枝節點 "+note.toString()); } } super.mouseClicked(e); //To change body of generated methods, choose Tools | Templates. } });
我給JTree添加了一個雙擊滑鼠事件,看一下上面的代碼的實現效果:
run:root 好友root 好友枝節點 客戶分葉節點 袁莉分葉節點 克旗
從上面我們可以看到分葉節點就是我們想要的,當使用者雙擊枝節點的時候,我們需要建立一個對話方塊,在對話方塊裡面使用JPanel設計布局,當雙擊好友的時候,彈出聊天對話方塊,我們在上面的代碼裡面在補充一個對話方塊功能,
tree = new JTree(top); tree.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2){ DefaultMutableTreeNode note=(DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if(note.isRoot()){ System.out.println("root "+note.toString()); }else if(note.isLeaf()){ System.out.println("分葉節點 "+note.toString()); ChatPanel chatPanel = new ChatPanel(); JDialog chatDialog = new JDialog(); chatDialog.setContentPane(chatPanel); chatDialog.setSize(501, 512); chatDialog.setVisible(true); }else{ System.out.println("枝節點 "+note.toString()); } } super.mouseClicked(e); //To change body of generated methods, choose Tools | Templates. } });
如下:
當然現在的效果只是一個框框,如果要實現通訊我們需要自己重寫這個JDialog,將需要的參數傳遞給JDialog才行,這個我們放在下面一章裡面。