`

java swing的树操作(增删改)

 
阅读更多
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

public class MyTree extends JFrame {

    //增加带滚动条容器  
    private JScrollPane jScrollPane1 = new JScrollPane();
    private JTree tree;
    private JPopupMenu popMenu;

    public JScrollPane getjScrollPane1() {
        return jScrollPane1;
    }

    public void setjScrollPane1(JScrollPane jScrollPane1) {
        this.jScrollPane1 = jScrollPane1;
    }

    public JPopupMenu getPopMenu() {
        return popMenu;
    }

    public void setPopMenu(JPopupMenu popMenu) {
        this.popMenu = popMenu;
    }

    public MyTree() {

        try {
            init();
            treeInit();
            popMenuInit();
        } catch (Exception exception) {
            exception.printStackTrace();
        }

        this.setSize(800, 600);
        this.setResizable(true);
        this.setMinimumSize(new Dimension(800, 600));
        this.setLocationRelativeTo(null);
        this.setVisible(true);

        //退出时需要终止当前jvm
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    //设置当前窗口的信息
    private void init() {
        getContentPane().setLayout(null);
        setTitle("树操作");
    }

    //初始化景点分类树
    public void treeInit() {
        if (jScrollPane1 != null) {
            this.remove(jScrollPane1);
        }
        jScrollPane1.setBounds(new Rectangle(0, 0, 800, 600));
        jScrollPane1.setAutoscrolls(true);
        this.getContentPane().add(jScrollPane1);
        expandTree();
        tree.addMouseListener(new TreePopMenuEvent(this));
        this.repaint();
    }

    //右键点击分类导航树的菜单
    private void popMenuInit() {
        popMenu = new JPopupMenu();
        JMenuItem addItem = new JMenuItem("添加");
        addItem.addActionListener(new TreeAddViewMenuEvent(this));
        JMenuItem delItem = new JMenuItem("删除");
        delItem.addActionListener(new TreeDeleteViewMenuEvent(this));
        JMenuItem modifyItem = new JMenuItem("修改");
        modifyItem.addActionListener(new TreeModifyViewMenuEvent(this));
        popMenu.add(addItem);
        popMenu.add(delItem);
        popMenu.add(modifyItem);
    }

    /**
     * 完全展开一个JTree
     *
     * @param tree JTree
     */
    public void expandTree() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");
        tree = new JTree(root);

        tree.addTreeSelectionListener(new TreeSelectionListener() {

            public void valueChanged(TreeSelectionEvent e) { //选中菜单节点的事件
                DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
            }
        });
        tree.updateUI();
        jScrollPane1.getViewport().add(tree);
    }

    /**
     * 获取图片文件内容
     *
     * @param fileName
     * @return
     */
    public Image getImage(String fileName) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(fileName);
            BufferedInputStream bis = new BufferedInputStream(fis);
            ByteBuffer bb = ByteBuffer.allocate(1024 * 1024);
            byte[] buffer = new byte[1];
            while (bis.read(buffer) > 0) {
                bb.put(buffer);
            }
            ImageIcon icon = new ImageIcon(bb.array());
            return icon.getImage();
        } catch (IOException ex) {
            Logger.getLogger(MyTree.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                fis.close();
            } catch (IOException ex) {
                Logger.getLogger(MyTree.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    public JTree getTree() {
        return tree;
    }

    /**
     * popmenu点击右键的增加处理
     */
    class TreeAddViewMenuEvent implements ActionListener {

        private MyTree adaptee;

        public TreeAddViewMenuEvent(MyTree adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            String name = JOptionPane.showInputDialog("请输入分类节点名称:");
            DefaultMutableTreeNode treenode = new DefaultMutableTreeNode(name);
            ((DefaultMutableTreeNode) this.adaptee.getTree().getLastSelectedPathComponent()).add(treenode);
            this.adaptee.getTree().expandPath(new TreePath(((DefaultMutableTreeNode) this.adaptee.getTree().getLastSelectedPathComponent()).getPath()));
            this.adaptee.getTree().updateUI();
        }
    }

    /**
     * popmenu点击右键的删除处理
     */
    class TreeDeleteViewMenuEvent implements ActionListener {

        private MyTree adaptee;

        public TreeDeleteViewMenuEvent(MyTree adaptee) {
            this.adaptee = adaptee;
        }

        public void actionPerformed(ActionEvent e) {
            int conform = JOptionPane.showConfirmDialog(null, "是否确认删除?", "删除景点确认", JOptionPane.YES_NO_OPTION);
            if (conform == JOptionPane.YES_OPTION) {
                DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) (((DefaultMutableTreeNode) this.adaptee.getTree().getLastSelectedPathComponent()).getParent());
                ((DefaultMutableTreeNode) this.adaptee.getTree().getLastSelectedPathComponent()).removeFromParent();
                this.adaptee.getTree().updateUI();
            }
        }
    }
}

/**
 * popmenu点击右键的修改处理
 */
class TreeModifyViewMenuEvent implements ActionListener {

    private MyTree adaptee;

    public TreeModifyViewMenuEvent(MyTree adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        String name = JOptionPane.showInputDialog("请输入新分类节点名称:");

        DefaultMutableTreeNode node = (DefaultMutableTreeNode) this.adaptee.getTree().getSelectionPath().getLastPathComponent();
        //改名 
        node.setUserObject(name);
        //刷新 
        this.adaptee.getTree().updateUI();
    }
}

/**
 * 菜单点击右键的事件处理
 */
class TreePopMenuEvent implements MouseListener {

    private MyTree adaptee;

    public TreePopMenuEvent(MyTree adaptee) {
        this.adaptee = adaptee;
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        TreePath path = adaptee.getTree().getPathForLocation(e.getX(), e.getY()); // 关键是这个方法的使用
        if (path == null) {
            return;
        }
        adaptee.getTree().setSelectionPath(path);
        if (e.getButton() == 3) {
            adaptee.getPopMenu().show(adaptee.getTree(), e.getX(), e.getY());
        }
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public static void main(String[] args) {
        try {
            JFrame.setDefaultLookAndFeelDecorated(true);
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            MyTree userframe = new MyTree();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(MyTree.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(MyTree.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(MyTree.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
            Logger.getLogger(MyTree.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}







分享到:
评论

相关推荐

    swing 写的与数据库的增删改查操作

    在"Swing写的与数据库的增删改查操作"中,我们探讨的是如何使用Swing来构建用户界面,同时通过Java Database Connectivity (JDBC) API进行数据库的CRUD(Create、Read、Update、Delete)操作。这个项目可能涉及了...

    demo.rar_DEMO_java增删改demo_swing java

    标题中的"demo.rar_DEMO_java增删改demo_swing java"表明这是一个关于Java编程的示例项目,重点展示了如何在Swing环境下实现数据的增、删、改操作。Swing是Java的一个图形用户界面(GUI)工具包,常用于开发桌面应用...

    宿舍管理系统java se swing

    1. **宿舍管理**:支持宿舍的增删改操作,这需要后台数据库对宿舍信息进行存储和检索。例如,管理员可以添加新的宿舍信息,如宿舍号、楼层、容纳人数等,也可以删除或修改现有宿舍的详情。 2. **学生信息录入与修改...

    SWING+JDBC+MSSQL 实现基本的增删改

    本示例主要讲解如何利用Java的SWING库构建图形用户界面(GUI),通过JDBC(Java Database Connectivity)与Microsoft SQL Server数据库进行交互,实现数据的基本增删改操作。下面将详细阐述这一过程。 首先,SWING...

    Java中单表和多表级联的增删改查

    "Java中单表和多表级联的增删改查"这个主题涵盖了基础的数据库操作以及更复杂的关联查询技术。以下是对这些知识点的详细解释: 1. **单表的增删改查(CRUD)**: - **Create(创建)**: 在Java中,通常使用JDBC...

    Java Swing Menu组件,JTable组件,JTree组件小示例

    它可以动态响应数据变化,如增删改。`JTable`依赖于`TableModel`接口,你需要实现这个接口来提供数据。此外,`DefaultTableModel`是内置的模型,适用于简单数据的展示。 示例代码: ```java DefaultTableModel ...

    jtable的增删改查

    **JTable的增删改查**是Java Swing中一个重要的组件使用场景,它在桌面应用开发中被广泛用于展示和操作表格数据。JTable是Java的javax.swing.JTable类的实例,它提供了用户交互的界面,使得用户能够查看、编辑、添加...

    java Swing 界面 购书商城 利用抽象工厂

    java Swing 界面 写的购书商城系统,实现了商品的增删改减,会员的添加,注册,登录,购买,删除订单,还利用了反射实现抽象工厂配置文件调用数据库。练手写的,比较急,很多没注释,重复代码块,将就一下,实现了...

    GUI界面和数据库的增删改可视化操作

    本主题主要探讨如何通过图形用户界面(GUI)实现数据库的增、删、改的可视化操作,以及相关的编程技术和工具,特别是使用Java语言的情况。 GUI界面设计的目标是提供直观且友好的操作环境,使得用户可以通过点击、...

    java swing选课管理系统

    Java Swing选课管理系统是一款基于Java GUI技术开发的教育管理软件,主要用于实现学生的选课操作,同时也支持管理员对课程数据的管理。系统的核心功能包括学生选课、退课、查询课程信息以及管理员对课程数据的增删改...

    java swing实现电影购票系统

    operUpdate方法用于执行增删改操作,而operQuery方法用于执行查找操作。这些方法可以用于各种数据库操作,例如插入、更新、删除和查询数据。 operUpdate方法 operUpdate方法用于执行增删改操作。该方法将sql语句和...

    java swing和jgraph实现的故障分析树软件,可执行jar文件,源码和文档

    使用java swing和开源jar包jgraph完成的故障分析树软件。包含可执行jar文件,源代码,以及说明文档和演示的PPT,视频。 图形界面美观,自动由公式生成树形结构,也可以用鼠标增删改。支持图形和公式编辑以及切换。

    课程设计-基于Java swing带GUI界面的超市收银系统(源码+数据库+报告).zip

    工作流程为:打开软件进入主界面,在主界面用户可以进行一般的销售作业,进行销售结算和添删改,点击转入后台按钮弹出用户验证窗,验证通过则进入后台管理模块。 当验证用户为管理员后,进入后台界面。 管理员用户:...

    java和jdbc用数据库连接的swing界面

    对于增删改,检查受影响的行数。 6. 关闭资源:执行完操作后,记得关闭Statement、ResultSet和Connection以释放资源。 在描述中提到的“简单过程”,可能是指创建一个简单的Swing窗口,添加一个或多个输入字段和一...

    java--简单人事管理系统

    《基于Java的人事管理系统详解》 Java是一种广泛应用于企业级应用开发的强大编程语言,其面向对象的特性、跨平台的兼容性以及丰富的类库使得它成为构建复杂系统的基础。在这个背景下,我们来深入探讨一个基于Java...

    基于JAVA实现记事本(设计说明书、代码)

    ### 基于JAVA实现记事本(设计说明书、代码)——相关知识点解析 #### 一、项目背景与概述 ...此外,项目过程中还学习和掌握了Java语言的相关特性和Swing库的使用方法,为后续更复杂的应用程序开发积累了宝贵的经验。

    基于java swing+jdbc+mysql实现的超市购物管理系统实习报告.docx

    达到的目标:能够通过SWING组件实现较为完整的UI,通过JDBC丰富超市内商品,实现商品的增删改等操作,通过对商品入库出库,上架下架等设计,掌握栈、队列等数据结构的使用。 功能要求:设计登录界面以及结算界面。...

    Java目录树控件

    它可以有子节点,并能进行增删改操作。 3. **DefaultTreeModel类**:此模型类负责维护树的数据结构。当你修改`DefaultMutableTreeNode`时,需要通过`DefaultTreeModel`的相应方法来更新树的状态。 4. **文件系统...

    javaswing学生选课成绩信息管理系统(ER图文档+视频+源码)

    - **数据库操作**: 利用 JDBC 进行数据库连接、查询、增删改等操作的代码。 - **异常处理**: 系统运行时可能出现的各种异常情况处理代码。 #### 六、学习价值 该资源对于学习 Java Swing 开发、数据库设计以及信息...

    Java语言实现的超市管理系统

    2. **视图层(View)**:这部分包含了用户界面的设计,可能使用Java Swing或JavaFX库来创建图形用户界面。用户可以通过这些界面进行商品管理、库存查询、销售统计等操作。 3. **控制层(Controller)**:控制器接收...

Global site tag (gtag.js) - Google Analytics