以下,笔者将介绍如果通过对JTree对象的操作实现如下功能:
1.将用户列表信息展示在JTree的结点上
2.双击某个结点获得该结点的信息
3.根据用户名删除结点
4.根据用户名添加结点
###预定义用到的属性
private JTree tree;//Tree to show user names
private DefaultTreeModel model;//Tree model
private DefaultMutableTreeNode root;//根结点
private JFrame frame;//加载组件的面板
###将用户列表信息展示在JTree的结点上
private void createTree(String[] userNames){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("我的好友");
for(String userName: userNames) {
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(userName);
friendRoot.add(newNode);
}
tree = new JTree(root);
}
###取得JTree的模型(DefaultTreeModel),将JTree加载到滚动面板上,并进行相关设置
public void addFriendList(String[] userNames){
createTree(userNames);
model = (DefaultTreeModel)tree.getModel();
tree.setFont(new Font("微软雅黑",Font.PLAIN,16));
JScrollPane sp = new JScrollPane(tree);
sp.setBounds(0, 150, 300, 400);
sp.setBackground(Color.white);
frame.add(sp);
javax.swing.SwingUtilities.updateComponentTreeUI(tree);
}
###双击某个结点获得该结点的信息
tree.addMouseListener(new MouseAdapter{
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2){
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
String selectedStr = (String)selectedNode.getUserObject();
if(selectedStr.equals("我的好友"))return;
else{
System.out.println("您选择的结点是:"+selectedStr);
//此处添加对结点进行操作的代码
}
}
}
});
###根据用户名获得JTree对象中对应的结点
private DefaultMutableTreeNode getUserNodeOnTree(String userName){
//广度优先遍历
Enumeration<TreeNode> e = (Enumeration<TreeNode>)root.breadthFirstEnumeration();
DefaultMutableTreeNode node=null;
while(e.hasMoreElements()) {
node = (DefaultMutableTreeNode)e.nextElement();
if(node.getUserObject().toString().equals(userName)) return node;
}
return null;
}
###根据用户名添加结点
public void addUser(String userName){
if(userName==null || userName.trim().length()==0) return ;
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(userName);
model.insertNodeInto(newNode, root, root.getChildCount());//在指定位置插入结点
}
###根据用户名删除结点
public void removeUser(String userName){
MutableTreeNode userNode = getUserNodeOnTree(userName);
if(userNode == null) return;
model.removeNodeFromParent(userNode);//删除结点
}
下面是笔者根据以上操作编写的一个用户列表界面,供参考:
由于笔者水平有限,错误疏漏之处在所难免,欢迎读者提出修改完善意见~~
笔者QQ:422104389 ,技术博客:yyzjava.iteye.com(那年此时)