⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blogmangeruiv2.java

📁 Java语言中JTree的具体应用实例
💻 JAVA
字号:
package jTreeFirst;

/**
 * 日志管理2.0版
 *
 * @author Administrator
 */
public class BlogMangerUIV2 extends javax.swing.JFrame {
	// 主界面:初始化创建,因为要做内部类中使用,定义为final型
	private static final BlogMangerUIV2 mainUI = new BlogMangerUIV2();

	public static void main(String[] args) {
		mainUI.init();
	}

	public void init() {
		this.setTitle("日志管理系统:奋斗在JAVA");
		this.setSize(300, 400);
		java.awt.FlowLayout f1 = new java.awt.FlowLayout();
		this.setLayout(f1);

		// 调用模拟生成数据对象的方法,得到UserInfo对象列表
		UserDao ud = new UserDao();
		java.util.List<UserInfo> userList = ud.getAllUser();

		// 根据传入的用户对象列表,调用创建树的方法,在createTree中创建树节点
		javax.swing.JTree tree = createTree(userList);
		// 设定树上的弹出菜单,并且在其中实现菜单事件
		javax.swing.JPopupMenu pop = createPopMenu(tree);
		tree.setComponentPopupMenu(pop);
		this.add(tree);
		this.setDefaultCloseOperation(3);
		this.setVisible(true);
	}

	// 创建一棵自定义的树:还没测试
	private javax.swing.JTree createTree(java.util.List<UserInfo> userList) {
		// 创建一个默认的树
		javax.swing.JTree tree = new javax.swing.JTree();
		// 创建根节点
		javax.swing.tree.DefaultMutableTreeNode rootNode = new javax.swing.tree.DefaultMutableTreeNode();
		rootNode.setUserObject("日志管理系统2.0版");
		// 取得创建节点所需的对象数据
		for (int i = 0; i < userList.size(); i++) {
			javax.swing.tree.DefaultMutableTreeNode studentNode = new javax.swing.tree.DefaultMutableTreeNode();
			UserInfo ui = userList.get(i);
			studentNode.setUserObject(ui);
			rootNode.add(studentNode);
			java.util.List<UserBlog> blogList = ui.getUserBlog();
			for (int t = 0; t < blogList.size(); t++) {
				javax.swing.tree.DefaultMutableTreeNode blogNode = new javax.swing.tree.DefaultMutableTreeNode();
				UserBlog ub = blogList.get(t);
				blogNode.setUserObject(ub);
				studentNode.add(blogNode);
			}
		}
		// 创建一个树的模型,传入参数为根节点,并将其赋给树tree
		javax.swing.tree.DefaultTreeModel model = new javax.swing.tree.DefaultTreeModel(
				rootNode);
		tree.setModel(model);
		return tree;
	}

	// 创建弹出菜单方法,并实现菜单事件:还没实现
	private javax.swing.JPopupMenu createPopMenu(final javax.swing.JTree tree) {
		// 创建一个默认的弹出菜单
		javax.swing.JPopupMenu popMenu = new javax.swing.JPopupMenu();
		// 创建弹出菜单下的菜单项:添加,删除,修改
		javax.swing.JMenuItem mi_add = new javax.swing.JMenuItem("添加");
		mi_add.setActionCommand("add");
		javax.swing.JMenuItem mi_del = new javax.swing.JMenuItem("删除");
		mi_del.setActionCommand("del");
		javax.swing.JMenuItem mi_mod = new javax.swing.JMenuItem("修改");
		mi_mod.setActionCommand("mod");

		// 创建内部类的事件监听器对象
		java.awt.event.ActionListener ac_listener = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				// 事件发生时,调用菜单事件处理方法
				treeMenuAction(e, tree);
			}
		};
		// 为菜单项添加事件监听器
		mi_add.addActionListener(ac_listener);
		mi_del.addActionListener(ac_listener);
		mi_mod.addActionListener(ac_listener);
		// 将菜单项添加到弹出菜单中
		popMenu.add(mi_add);
		popMenu.add(mi_del);
		popMenu.add(mi_mod);
		return popMenu;
	}

	// 菜单事件处理方法:还未测试
	private void treeMenuAction(java.awt.event.ActionEvent e,
			javax.swing.JTree tree) {
		// 得到选中菜单的命令
		String command = e.getActionCommand();
		// 得到选中对象在树上的路径
		javax.swing.tree.TreePath tp = tree.getSelectionPath();
		if (null != tp) {
			javax.swing.tree.DefaultMutableTreeNode selectNode = (javax.swing.tree.DefaultMutableTreeNode) tp
					.getLastPathComponent();
			Object ob = selectNode.getUserObject();
			if (ob instanceof UserInfo) {
				UserInfo ui = (UserInfo) ob;
				// 调用相应的处理方法
				changeUserInfo(command, ui, selectNode);//????
			}
			if (ob instanceof UserBlog) {
				UserBlog ub = (UserBlog) ob;
				// 调用相应的处理方法
				changeBlogInfo(command, ub, selectNode);//????
			}
		} else
			javax.swing.JOptionPane.showMessageDialog(this, "请选中目标对象");
	}

	// 学生对象信息处理方法:还未测试
	private void changeUserInfo(String command, UserInfo userObject,
			javax.swing.tree.DefaultMutableTreeNode selectNode) {
		if (command.equals("del")) {
			// 提醒用户确认 是否删除
			int i = javax.swing.JOptionPane.showConfirmDialog(this, "确认删除吗?");
			if (0 == i) {// 为零表示确认删除, 刷新显示删除后的结果
				selectNode.removeFromParent();
				javax.swing.SwingUtilities.updateComponentTreeUI(this);
			} 
		}
		else
			showAddorModifyUserInfo(command, userObject, selectNode);
	}

	// 日志对象信息处理方法:还没测试
	private void changeBlogInfo(String command, UserBlog blogObject,
			javax.swing.tree.DefaultMutableTreeNode selectNode) {
		if (command.equals("del")) {
			int i = javax.swing.JOptionPane.showConfirmDialog(this, "确认删除吗?");
			if (0 == i) {
				selectNode.removeFromParent();
				javax.swing.SwingUtilities.updateComponentTreeUI(this);
			} 
		}
		else
			showAddorModifyBlogInfo(command, blogObject, selectNode);
	}

	// 添加或修改学生对象方法:还未测试
	private void showAddorModifyUserInfo(final String command,final UserInfo userObject,final javax.swing.tree.DefaultMutableTreeNode selectNode){
		// 创建添加或修改的对话框,显示输入组件
		final javax.swing.JDialog jda = new javax.swing.JDialog();
		java.awt.FlowLayout f1 = new java.awt.FlowLayout();
		jda.setLayout(f1);
		jda.setSize(200, 300);
		jda.setModal(true);

		// 创建对话框中所必需的元素对象,将元素对象添加到对话框中去
		javax.swing.JLabel la_name = new javax.swing.JLabel("用户名:");
		final javax.swing.JTextField jta_name = new javax.swing.JTextField(20);
		javax.swing.JLabel la_age = new javax.swing.JLabel("用户年龄:");
		final javax.swing.JTextField jta_age = new javax.swing.JTextField(5);
		jda.add(la_name);
		jda.add(jta_name);
		jda.add(la_age);
		jda.add(jta_age);

		// 创建对话框上的按钮
		javax.swing.JButton bu_user = new javax.swing.JButton();
		if(command.equals("add")){
			jda.setTitle("添加一个用户");
			bu_user.setText("添加");
		}
		else{
			jda.setTitle("修改目标用户的信息");
			bu_user.setText("修改");
			// 将节点中的信息显示到对话框界面上
			jta_name.setText(userObject.getName());
			jta_age.setText(""+userObject.getAge());// 用户年龄设定界面上必须是字符型的
		}
		jda.add(bu_user);
		bu_user.addActionListener(new java.awt.event.ActionListener(){
			// 添加对话框上的事件执行
			public void actionPerformed(java.awt.event.ActionEvent e){
				String name = jta_name.getText();//得到用户输入的内容
				
				//TEXT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			
				String str_age = jta_age.getText();
				
				//将从界面上得到的年龄字符串转化为int型:
				int age = Integer.parseInt(str_age);
				if(command.equals("add")){
					
					UserInfo newUser = new UserInfo();
					newUser.setAge(23);
					newUser.setId(56);
					newUser.setName("奋战在JAVA");
					javax.swing.tree.DefaultMutableTreeNode newNode = new javax.swing.tree.DefaultMutableTreeNode();
					newNode.setUserObject(newUser);
					//获取已选中节点的父节点,添加新节点
					javax.swing.tree.DefaultMutableTreeNode parent = (javax.swing.tree.DefaultMutableTreeNode)selectNode.getParent();
					parent.add(newNode);
					//新建的用户,创建一个默认的blog对象
					UserBlog ub = new UserBlog();
					ub.setContent("默认的第一个日志");
					java.util.Date now = new java.util.Date();
					java.text.SimpleDateFormat f = new java.text.SimpleDateFormat();
					String finishTime =f.format(now);
					ub.setFinishTime(finishTime);
					ub.setId(58);
					ub.setTitle("aaaaaaaaaaaaaaaaaaaaaaaa");
					ub.setUser(userObject);
					javax.swing.tree.DefaultMutableTreeNode newBlog = new javax.swing.tree.DefaultMutableTreeNode();
					newBlog.setUserObject(ub);
					newNode.add(newBlog);
				}
				if(command.equals("mod")){
					userObject.setAge(age);
					userObject.setName(name);
				}
				jda.dispose();
				javax.swing.SwingUtilities.updateComponentTreeUI(mainUI);
			}
		});
		jda.setVisible(true);
	}

	// 添加或修改日志对象方法:还未测试
	private void showAddorModifyBlogInfo(final String command, final UserBlog blogObject,
			final javax.swing.tree.DefaultMutableTreeNode selectNode) {
		//创建并弹出对话框,显示输入组件
		final javax.swing.JDialog jda = new javax.swing.JDialog();
		java.awt.FlowLayout f1 = new java.awt.FlowLayout();
		jda.setLayout(f1);
		jda.setSize(200, 400);
		jda.setModal(true);
		javax.swing.JLabel la_title = new javax.swing.JLabel("日志标题");
		final javax.swing.JTextField jta_title = new javax.swing.JTextField(12);
		javax.swing.JLabel la_content = new javax.swing.JLabel("日志内容");
		final javax.swing.JTextArea jta_content = new javax.swing.JTextArea(10,10);
		jda.add(la_title);
		jda.add(jta_title);
		jda.add(la_content);
		jda.add(jta_content);
		
		javax.swing.JButton bu_blog = new javax.swing.JButton();
		//根据命令的不同,设定对话框上的标签
		if(command.equals("add")){
			jda.setTitle("用户"+blogObject.getUser().getName()+"添加一篇日志");
			bu_blog.setText("添加");
		}
		else{
			jda.setTitle("修改日志");
			bu_blog.setText("修改");
			//将节点中的信息显示到界面上
			jta_title.setText(blogObject.getTitle());
			jta_content.setText(blogObject.getContent());
		}
		jda.add(bu_blog);
		//添加对话框上的按钮的事件处理器
		bu_blog.addActionListener(new java.awt.event.ActionListener(){
			public void actionPerformed(java.awt.event.ActionEvent e){
				String title = jta_title.getText();
				String content = jta_content.getText();
				if(command.equals("add")){
					UserBlog ub = new UserBlog();
					ub.setContent(content);
					//程序中生成创建日志的格式化时间
					java.util.Date now = new java.util.Date();
					java.text.SimpleDateFormat f = new java.text.SimpleDateFormat("yyyy年mm月dd日hh:mm:ss");
					String timeStr = f.format(now);
					ub.setFinishTime(timeStr);
					ub.setId(456);
					ub.setTitle("新建日志");
					ub.setUser(blogObject.getUser());
					blogObject.getUser().addBlog(ub);
					//创建新节点
					javax.swing.tree.DefaultMutableTreeNode dm = new javax.swing.tree.DefaultMutableTreeNode();
					dm.setUserObject(ub);
					javax.swing.tree.DefaultMutableTreeNode parent = (javax.swing.tree.DefaultMutableTreeNode)selectNode.getParent();
					parent.add(dm);
				}
				if(command.equals("mod")){
					blogObject.setTitle(title);
					blogObject.setContent(content);
				}
				jda.dispose();
				javax.swing.SwingUtilities.updateComponentTreeUI(mainUI);
			}
		});
		jda.setVisible(true);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -