📄 blogmangeruiv2.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 + -