您的位置:首页 > 其它

简单的右键菜单编剧树形节点

2010-05-23 23:37 323 查看
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

public class Treetest extends JFrame {

private JTree tree;
DefaultTreeModel treeModel;
public static void main(String[] args) {
Treetest t = new Treetest();
t.splitPane();
t.jpopup();
}

/*利用树模型创建树形结构*/

public void splitPane(){

setTitle("树形结构");
setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JSplitPane jpane = new JSplitPane(); //创建分割面板
JScrollPane scroll = new JScrollPane(); //创建滚动面板
jpane.setDividerLocation(100); //设置分隔板与左边距100像素
jpane.setOneTouchExpandable(true); // 设置设置水平分割面板的分隔条显示UI小部件

/*添加各个节点*/

DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("常用布局");
DefaultMutableTreeNode chlid1 = new DefaultMutableTreeNode ("流式布局");
DefaultMutableTreeNode chlid2 = new DefaultMutableTreeNode ("边界布局");
DefaultMutableTreeNode chlid3 = new DefaultMutableTreeNode ("网格布局");
DefaultMutableTreeNode chlid11 = new DefaultMutableTreeNode ("A");
DefaultMutableTreeNode chlid12 = new DefaultMutableTreeNode ("B");
DefaultMutableTreeNode chlid13 = new DefaultMutableTreeNode ("C");
DefaultMutableTreeNode chlid21 = new DefaultMutableTreeNode ("Z");
DefaultMutableTreeNode chlid22 = new DefaultMutableTreeNode ("d");
DefaultMutableTreeNode chlid31 = new DefaultMutableTreeNode ("f");
DefaultMutableTreeNode chlid32 = new DefaultMutableTreeNode ("dd");
rootNode.add(chlid1);
rootNode.add(chlid2);
rootNode.add(chlid3);
chlid1.add(chlid11);
chlid1.add(chlid12);
chlid1.add(chlid13);
chlid2.add(chlid21);
chlid2.add(chlid22);
chlid3.add(chlid31);
chlid3.add(chlid32);
treeModel = new DefaultTreeModel(rootNode,true);
tree = new JTree(treeModel);
tree.setEditable(true); //设置树形可编辑
tree.setFont(new Font("宋体",Font.BOLD,14));
scroll.setViewportView(tree);
jpane.setLeftComponent(scroll);
getContentPane().add(jpane);

setVisible(true);
}

/*创建右键菜单,实现对树形结构的添加,删除,修改*/

public void jpopup(){
//super();
final JPopupMenu jpopMenu = new JPopupMenu();
JMenuItem mi_new = new JMenuItem("添加节点");
/* 为添加节点添加动作监听器*/
mi_new.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
DefaultMutableTreeNode node = new DefaultMutableTreeNode("new Node"); // 创建欲添加节点
TreePath selectionPath = tree.getSelectionPath(); // 创建欲添加节点
DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode)selectionPath.getLastPathComponent(); // 获得选中的父节点
treeModel.insertNodeInto(node, parentNode, parentNode.getChildCount()); // 插入节点到所有子节点之后
TreePath path = selectionPath.pathByAddingChild(node); // 获得新添加节点的路径
if(!tree.isVisible(path)){
tree.makeVisible(path); // 如果该节点不可见则令其可见
}
}
});
/* 为修改节点添加动作监听器*/
JMenuItem mi_edit = new JMenuItem("修改结点");
mi_edit.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

TreePath path = tree.getSelectionPath(); //获取选中节点路径
if (path != null)
tree.startEditingAtPath(path); //选中节点呈现编辑

}

});
/* 为删除节点添加动作监听器*/
JMenuItem mi_delete = new JMenuItem("删除节点");
mi_delete.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {
DefaultMutableTreeNode node =(DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); // 获得选中的欲删除节点
if(!node.isRoot()){ // 查看欲删除的节点是否为根节点,根节点不允许删除
DefaultMutableTreeNode nextSelectedNode = node.getNextSibling(); // 获得下一个兄弟节点,以备选中
if(nextSelectedNode == null) // 查看是否存在兄弟节点
nextSelectedNode =(DefaultMutableTreeNode) node.getParent(); // 如果不存在则选中其父节点
treeModel.removeNodeFromParent(node); // 删除节点
tree.setSelectionPath(new TreePath(nextSelectedNode.getPath())); // 选中节点

}
}

});
jpopMenu.add(mi_new);
jpopMenu.add(mi_edit);
jpopMenu.addSeparator();
jpopMenu.add(mi_delete);
/*创建右键传出菜单*/
tree.addMouseListener(new MouseAdapter(){
public void mouseReleased(final MouseEvent e){
if(e.isPopupTrigger()){
jpopMenu.show(e.getComponent(),e.getX(),e.getY());
}
}
});

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: