精华内容
下载资源
问答
  • JavaSwing实现树形结构

    千次阅读 2013-12-07 23:54:55
    原文链接:http://blog.csdn.net/syb18810107241/article/details/17166093 一、Applet package ... import java.awt.Container; import javax.swing.JApplet; import javax.swing.Swin

    原文链接:http://blog.csdn.net/syb18810107241/article/details/17166093

    一、Applet

    package com.jy.applet.day1206;  
      
    import java.awt.Container;  
      
    import javax.swing.JApplet;  
    import javax.swing.SwingUtilities;  
    import javax.swing.UIManager;  
      
    import org.apache.commons.logging.Log;  
    import org.apache.commons.logging.LogFactory;  
      
    import com.jy.applet.day1206.swing.pane.TestPane;  
      
      
      
    /** 
     * 用来实现树形结构的Applet 
     *  
     * @author Administrator 
     *  
     */  
    @SuppressWarnings("serial")  
    public class AppletTest1 extends JApplet {  
        private static final Log log = LogFactory.getLog(AppletTest1.class);// 日志记录  
        private static AppletTest1 instance;  
        public static Container container;// 一个可包含其他 AWT 组件的组件。  
      
        public void init() {  
            log.info("Applet初始化......");  
            instance = this;  
            SwingUtilities.invokeLater(new Runnable() {  
      
                public void run() {  
                    try {  
                        UIManager.setLookAndFeel(UIManager  
                                .getSystemLookAndFeelClassName());//设置外观感觉  
                        container = getContentPane();//获取内容面板  
                        TestPane pane = new TestPane();//初始化主面板  
                        container.add(pane);//将主面板添加到内容面板  
                    } catch (Exception e) {  
                        e.printStackTrace();  
                    }  
      
                }  
      
            });  
        }  
      
        public static AppletTest1 getInstance() {  
            return instance;  
        }  
      
        public void destroy() {  
            log.info("程序正在关闭.....");  
        }  
      
    }  
    二、主面板

    package com.jy.applet.day1206.swing.pane;  
      
    import java.util.List;  
      
    import javax.swing.JScrollPane;  
    import javax.swing.JTree;  
      
    import org.apache.commons.logging.Log;  
    import org.apache.commons.logging.LogFactory;  
      
    import com.jy.applet.day1206.swing.tree.JTreeNode;  
    import com.jy.applet.util.DataTestDao;  
      
      
      
    @SuppressWarnings({"serial","unchecked"})  
    public class TestPane extends JScrollPane{  
        private static final Log log = LogFactory.getLog(TestPane.class);  
        private static TestPane instance;//实例变量  
        public JTree myTree;//面板中的树  
        JTreeNode rootNode ;//自定义根节点  
        public TestPane(){  
            instance = this;  
            init();  
        }  
          
        private void init() {  
            log.info("开始初始化主面板......");  
            setAutoscrolls(true);  
            getViewport().removeAll();  
            rootNode = new JTreeNode("中国");  
            JTreeNode secondTreeNode = null;//第二层节点  
            JTreeNode leafTreeNode = null;//叶子节点  
            List provinceList = DataTestDao.getProvinceList();//省份的集合  
            String provinceId = null;  
            /**如果省份和城市的集合不为空,并且元素个数大于0**/  
            if (provinceList != null && provinceList.size() > 0) {  
                for (int i = 0; i < provinceList.size(); i++) {  
                    secondTreeNode = (JTreeNode) provinceList.get(i);//获取二层节点  
                    provinceId = secondTreeNode.getId();//获取省份ID  
                    List<JTreeNode> cityList = DataTestDao.getCityListByProID(provinceId);//根据省份ID查询城市  
                    if(cityList != null && cityList.size() > 0){  
                        for(int j = 0;j < cityList.size();j ++){  
                            leafTreeNode = cityList.get(j);//获取叶子节点,即城市  
                            secondTreeNode.add(leafTreeNode);//将叶子节点挂到第二层节点上  
                        }  
                    }  
                    rootNode.add(secondTreeNode);//把第2层节点,添加到根节点   
                }  
            }  
              
            myTree = new JTree(rootNode);//以rootNode为根节点,创建一个树形结构  
            myTree.putClientProperty("JTree.lineStyle", "Horizontal");//树形结构的线条风格  
            myTree.setVisible(true);  
            myTree.updateUI();  
            instance.setViewportView(myTree);  
                    /**注册事件**/  
                    MyTreeAdapter treeAdapter = new MyTreeAdapter();  
                    myTree.addTreeSelectionListener(treeAdapter);  
     }  
        public static TestPane getInstance() {  
            return instance;  
        }  
    }  
    三、用来模拟数据库的DAO

    package com.jy.applet.util;  
      
    import java.util.ArrayList;  
    import java.util.List;  
      
    import com.jy.applet.day1206.swing.tree.JTreeNode;  
    import com.jy.applet.entity.City;  
      
    /** 
     * 用户模拟数据的DAO 
     * @author Administrator 
     * 
     */  
    @SuppressWarnings("unchecked")  
    public class DataTestDao {  
      
        public static List getProvinceList() {  
            List<String> provinces = new ArrayList<String>();  
            provinces.add("北京市");  
            provinces.add("天津市");  
            provinces.add("上海市");  
            provinces.add("重庆市");  
            provinces.add("山东省");  
            provinces.add("江苏省");  
            provinces.add("浙江省");  
            provinces.add("广东省");  
              
            List<JTreeNode> returnList = new ArrayList<JTreeNode>();  
            JTreeNode treeNode = null;  
            for(int i=0;i < provinces.size();i++){  
                treeNode = new JTreeNode(provinces.get(i));  
                treeNode.setId(i+"");  
                returnList.add(treeNode);  
            }  
            return returnList;  
        }  
      
        public static List<JTreeNode> getCityListByProID(String provinceId) {  
            List<City> citys = new ArrayList<City>();  
            List<JTreeNode> returnList = new ArrayList<JTreeNode>();  
            JTreeNode treeNode = null;  
            if(provinceId.equals("0")){  
                //北京市  
                citys.add(new City(provinceId,"海淀区"));  
                citys.add(new City(provinceId,"东城区"));  
                citys.add(new City(provinceId,"西城区"));  
            }else if(provinceId.equals("1")){  
                //天津市  
                citys.add(new City(provinceId,"河东区"));  
                citys.add(new City(provinceId,"河西区"));  
                citys.add(new City(provinceId,"塘沽区"));  
            }else if(provinceId.equals("2")){  
                //上海市  
                citys.add(new City(provinceId,"浦东新区"));  
                citys.add(new City(provinceId,"黄浦区"));  
                citys.add(new City(provinceId,"宝山区"));  
            }else if(provinceId.equals("3")){  
                //重庆市  
                citys.add(new City(provinceId,"渝北区"));  
                citys.add(new City(provinceId,"巫山县"));  
                citys.add(new City(provinceId,"涪陵区"));  
            }else if(provinceId.equals("4")){  
                //山东省  
                citys.add(new City(provinceId,"济南市"));  
                citys.add(new City(provinceId,"青岛市"));  
                citys.add(new City(provinceId,"烟台市"));  
                citys.add(new City(provinceId,"潍坊市"));  
                citys.add(new City(provinceId,"日照市"));  
                citys.add(new City(provinceId,"聊城市"));  
            }else if(provinceId.equals("5")){  
                //江苏省  
                citys.add(new City(provinceId,"南京市"));  
                citys.add(new City(provinceId,"徐州市"));  
                citys.add(new City(provinceId,"苏州市"));  
                citys.add(new City(provinceId,"无锡市"));  
                citys.add(new City(provinceId,"镇江市"));  
                citys.add(new City(provinceId,"扬州市"));  
            }else if(provinceId.equals("6")){  
                //浙江省  
                citys.add(new City(provinceId,"杭州市"));  
                citys.add(new City(provinceId,"温州市"));  
                citys.add(new City(provinceId,"宁波市"));  
                citys.add(new City(provinceId,"绍兴市"));  
                citys.add(new City(provinceId,"金华市"));  
                citys.add(new City(provinceId,"衢州市"));  
            }else if(provinceId.equals("7")){  
                //广东省  
                citys.add(new City(provinceId,"广州市"));  
                citys.add(new City(provinceId,"深圳市"));  
                citys.add(new City(provinceId,"珠海市"));  
                citys.add(new City(provinceId,"东莞市"));  
                citys.add(new City(provinceId,"惠州市"));  
                citys.add(new City(provinceId,"肇庆市"));  
            }else{  
                  
            }  
            for(int i=0;i < citys.size();i++){  
                treeNode = new JTreeNode(citys.get(i).getName());  
                treeNode.setId(i+"");  
                returnList.add(treeNode);  
            }  
            return returnList;  
        }  
      
    }  
    四、监听器

    package com.jy.applet.day1206.swing.adapter;  
      
    import javax.swing.JOptionPane;  
    import javax.swing.event.TreeSelectionEvent;  
    import javax.swing.event.TreeSelectionListener;  
    import javax.swing.tree.TreePath;  
      
    import com.jy.applet.day1206.swing.tree.JTreeNode;  
      
    public class MyTreeAdapter implements TreeSelectionListener {  
      
        @Override  
        public void valueChanged(TreeSelectionEvent e) {  
            TreePath treePath = e.getNewLeadSelectionPath();// 例如[中国, 江苏省, 南京市]  
            if (treePath != null) {  
                // 返回路径上最底层的组件,对于树形结构,即叶子节点  
                // this will return an instance of TreeNode.  
                JTreeNode node = (JTreeNode) treePath.getLastPathComponent();  
                StringBuilder sb = new StringBuilder();  
                sb.append("您选择的是:");  
                sb.append(node);  
                sb.append("\r\n");  
                sb.append("路径为:");  
                sb.append(treePath);  
                JOptionPane.showMessageDialog(null, sb, "提示",  
                        JOptionPane.INFORMATION_MESSAGE);  
            } else {  
                JOptionPane.showMessageDialog(null, "您尚未选择省份或城市!", "错误",  
                        JOptionPane.ERROR_MESSAGE);  
            }  
        }  
      
    }  
    五、【效果如下】


    展开全文
  • 使用java swing和开源jar包jgraph完成的故障分析软件。包含可执行jar文件,源代码,以及说明文档和演示的PPT,视频。 图形界面美观,自动由公式生成形结构,也可以用鼠标增删改。支持图形和公式编辑以及切换。
  • 本例使用Java Swing技术实现了一个文本编辑器,类似于windows记事本。可以实现诸如打开文件,设置字体,颜色,撤销,搜索,状态栏显示,自动换行,转到,替换等功能
  • 愤怒!竟然还有学校还在教 JavaSwing

    万次阅读 多人点赞 2021-05-24 08:34:36
    昨天,有个读者私信我说,“老师正在教 Swing,这个...但我内心其实是非常愤怒的,都什么时候了,Java 中的 Swing 早被淘汰了,哪个项目还会用这玩意编写客户端界面呢! 学 Swing、AWT 这些图形化组件纯属浪费时间! 可

    昨天,有个读者私信我说,“老师正在教 Swing,这个知识点还需要学习吗?”

    说句实在话,刚看到这个问题的时候,我是想骂娘的!不是骂读者啊,你懂得,骂学校,骂老师。但我硬是掐着自己的大腿忍住了,很客气地回复了一句“对,甚至可以不学”。

    有点点到为止的味道。

    我之所以这么委婉,是希望读者不要对学校的老师心存偏见,影响了后面的学习进度。但我内心其实是非常愤怒的,都什么时候了,Java 中的 Swing 早被淘汰了,哪个项目还会用这玩意编写客户端界面呢!

    学 Swing、AWT 这些图形化组件纯属浪费时间!

    可能有些老师也没真正在公司里实战过,拿本书就上来教,导致学生把大量的时间浪费在不需要学习的知识点上,以至于毕业找工作的时候,能力达不到招聘的要求。

    有些学校很装逼的,老师都是拿自己的书来讲课的,反正我大学那会就是,觉得老师挺牛逼的呀,都自己出书了!后来等我自己出书了,才发现,原来出书也没什么难的呀(嗯,我在装逼)!

    有些学校还不错,会选一些计算机专业的经典著作,比如说各种黑皮书作为教材。我只能说,能在这样的学校里待着的同学都是幸运的。

    怕就怕,有些老师把教材直接拿过来不做过滤。不管是《Java 编程思想》还是《Java 核心技术卷 1》,里面都有大量的篇幅介绍 Swing、AWT 这些,但有工作经验的人都知道,这些在工作中是完全不用的东西。

    我在推荐这两本书的时候,都会明确指出,不要去学这些东西,直接跳过,甚至可以直接撕掉。

    希望出版社的编辑朋友们再版这些书的时候,能把这些不用的东西剔除掉,以免影响了初学 Java 的读者。当然了,我知道,这很难做到,删了等于书就变薄了,计算机专业领域的书都一本比一本厚,一本比一本贵!删了估计就卖不到这个价了,血亏。

    那对于初学者来说,该怎么办呢?

    当然是多关注一下真正有实力的编程大佬们,比如说我的好朋友 JavaGuide、江南一点雨等等,以及二哥我(加粗、加感叹号)!!!!!!!!!!

    有问题,直接过来问,然后就知道学习的重点了!比跟着某些老师瞎学要强多了。

    这不,刚好有编程新手过来问问题,二哥特别热情,还顺带做了一次心理按摩,帮助读者缓解压力,疏通脉络。

    接下来,我来重点说说,怎么才能找到实习工作。

    二哥的读者群体里有很大一部分都是大学生,所以如果你今天看了这篇文章,并且看到了这里,OK,恭喜你,直了,不不不,值了!

    找 Java 后端的实习工作,首先要明白一点,校招不同社招,不会要求太多的项目经验,这一点,看似很浅显的道理,但往往很多学弟学妹容易在这一点上纠结,我缺项目经验啊,要狠狠地补,结果把计算机基础方面的学习给抛之脑后了,导致拣了芝麻丢了西瓜,得不偿失。

    临到毕业季,很多公司就会到学校去校招,标准其实很简单,Java 方面能做一些简单的增删改查就行,但学习能力一定要强,基础一定要扎实,方便后面培养。因为刚入职的新人,靠谱的公司都会安排师父带,还会安排一定量的培训,公司是不怕你项目经验不足的,怕的是你学习进度跟不上。

    我当年在外企实习的时候,就是,一上来,直接给两个月的时间,做个小项目,我当时被安排的是做个仿 Win7 的计算器(源码和成品还放在 CSDN 的资源库里),嗯,当时用的 Swing 做的界面,但那已经是 12 年前的事了!等过了辞退阶段,公司就安排了很多培训,培训编码规范了、开发流程了等等这些。

    差不多工作了一年半的时候,我做了小组 Leader 的时候,还给新人培训过好多次,讲 Flex 是怎么用的。嗯,这玩意也被淘汰了!

    (时不时就透露出我是一名 old 码农的浓烈气息)

    好了,不废话了。来说下 Java 后端实习生的最基本的要求。

    第一,经常用的工具一定要熟练

    比如说 Intellij IDEA 一定要能熟练地使用。如果你想写出质量杠杠的 Java 代码,又想追求开发效率,用 Intellij IDEA 准没错!可以去 GitHub 上看一下 Intellij IDEA 中文版的教程,快捷键设置了、代码模板了、常用插件了,这些都有详细地说明。

    https://github.com/judasn/IntelliJ-IDEA-Tutorial

    我举个简单的例子,像 **CheckStyle、Alibaba Java 代码规范、SonarLint 这三个插件是一定要装的,可以极大程度上保证代码质量。**除了这 3 个,还有呢:

    这些都能在很大程度上提高编写代码的效率。

    比如说 Git 一定要能熟练的使用。大家都知道,版本控制系统非常重要!!!!!!

    即便你只是一个人在编码,它也可以帮助你创建项目的快照、记录每个改动、创建不同的分支等等。如果你参与的是多人协作,它更是一个无价之宝,你不仅可以看到别人对代码的修改,还可以同时解决由于并行开发带来的冲突。版本控制系统有很多,其中最突出的代表就是 Git。

    想要把 Git 学好的话,可以看一下 Pro Git 中文版 PDF,可以说是学习 Git 的最佳教程,因为作者就是 Git 的一个主要实现的贡献者。

    第二,Java 基础一定要扎实

    像 Java 的数据类型、Java 的运算符、Java 的流程控制、Java 的面向对象、Java 的异常处理,这些都是最基础的东西,是初学 Java 的时候必须掌握的知识点。

    然后是 Java 集合框架、Java IO、Java 网络编程、Java 多线程并发、Java 虚拟机,这些是 Java 中比较核心的知识点,也是必须要掌握的。

    大家可以先看看我整理的这份 GitHub 上星标 115k+ 的 Java 教程,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机,内容不多,只讲重点

    GitHub 星标 115k+的 Java 教程,超级硬核!

    Java 集合框架中,像 ArrayList 与 LinkedList 之间的差别,HashMap 的数据结构、工作原理、哈希冲突、扩容过程、拉链法导致链表过深时为什么不用二叉查找树而选择红黑树、Java 8 时 HashMap 发生了什么变化、HashMap & ConcurrentHashMap 的区别等等,是面试的时候考察的重点。

    多线程并发算是 Java 基础当中的难点之一,需要掌握的知识点我用思维导图列一下。

    还有 Java 虚拟机,要学的知识点有:Java 虚拟机内存结构、垃圾收集策略与算法、内存分配与回收策略、Java 虚拟机性能调优、类文件结构、类加载机制等等。

    怎么学呢?推荐大家一本书,就一本书,周志明老师的《深入理解 Java 虚拟机》,一开始啃起来可能会比较痛苦,但我必须得负责任的告诉你,多啃一啃,面试的时候很容易就把面试官给惊艳了。

    第三,掌握 MySQL 数据库。

    先来看一下 MySQL 的知识体系,还是用思维导图的形式。

    对于基本的 SQL 语句,推荐《SQL 必知必会》这本书,很薄,很快就能学完了。然后是《MySQL 必知必会》,讲的很全,但很简练,非常适合零基础的学弟学妹。如果想更深入的学习 MySQL 的话,推荐两本书,《高性能 MySQL》和《MySQL 技术内幕:InnoDB 存储引擎》。

    如果英语功底比较扎实的话,推荐看 MySQL Tutorial 这个英文网站教程,遇到阻碍的话,可以借助一下谷歌翻译。

    https://www.mysqltutorial.org/

    如果你有一台自己的服务器(学生购买的话也比较便宜)的话,可以到阿里云大学上学习,里面有 18 门免费课程,从 SQL 到 NoSQL,从自建到云上数据库,一站式学习+自测。

    第四,掌握 Spring 系列框架

    想成为一名合格的 Java 后端开发工程师,Spring 的系列框架是必须得掌握的,yyds。从 SSM(Spring+Spring MVC+MyBatis)到 Spring Boot,再到 Spring Cloud,都得会用。

    事实上,Spring 早已成为 Java 后端开发的行业标准,如何用好 Spring,是 Java 程序员的必修课之一。由于 Spring 的快速发展,它逐渐从一个轻量级的开发框架变成了一个“庞然大物”,越来越笨重,导致搭建一个应用程序的成本越来越高,于是 Spring Boot 就应运而生了,它能帮助开发者快速搭建出一个独立应用,只需要很少的配置就可以了。可以毫不夸张的说,Spring Boot,牛逼!

    Spring Cloud 利用 Spring Boot 的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,可以说,Spring Cloud 的诞生,又一次解放了Java 程序员的生产力。

    关于 SSM 的学习,可以看下江南一点雨在 B 站上的视频,能为后面学习 Spring Boot 打下坚实的基础。

    https://www.bilibili.com/video/BV1NX4y1G7wx

    我来简单介绍一下 SSM 具体是什么。

    1)Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。它可以装载 Bean,也就是 Java 中的类,包括 Service、Dao 里面的;利用控制反转这个机制,我们就不用在每次使用类的时候用 new 关键字声明并初始化。另外,Spring 事务管理也是开发中常用到的。

    2)来看一下 SpringMVC 的工作原理:

    • 客户端发送请求到 DispacherServlet(分发器)
    • 由 DispacherServlet 控制器查询 HanderMapping,找到处理请求的 Controller
    • Controller 调用业务逻辑处理后,返回 ModelAndView
    • DispacherSerclet 查询视图解析器,找到 ModelAndView 指定的视图
    • 视图负责将结果显示到客户端

    3)MyBatis 是一个支持普通 SQL 查询,存储过程和高级映射的持久层框架。它对 JDBC 做了封装,让数据库底层操作变的更透明了。 MyBatis 的操作都是围绕着一个叫 sqlSessionFactory 的实例展开的,通过配置文件关联到各个实体类的 Mapper 文件,再由 Mapper 文件映射每个类对数据库所需要执行的 SQL 语句。

    关于 Spring Boot、Spring Cloud 的学习,可以看纯洁的微笑的博客,访问量在千万级别以上,影响了无数的初学者,我也是被影响者之一。

    至于说 Redis、Dubbo 等等等等,我就不再强调了,就上面的这 4 个最基本的要求,就够喝一壶了。还有像算法与数据结构、操作系统、编译原理、计算机网络、计算机组成原理等等这些通用层面的,我也不再一一强调了。大学阶段,有时间就搞这些,如果学校已经安排了这些课程,那就更好了,学,一定要学!

    大学时光说短不短,说长不长,作为过来人,真的是感觉一眨眼就过去了;对于正在读大学的学弟学妹们来说,正是青春的好时光,有很多事情要做,忙着社交,忙着拓展,忙着锻炼,忙着课业,忙着恋爱,忙不得开交。怎么在这么多事情的夹缝中努力学习呢?

    就是一定要学会做减法,不该学的内容就不要再花时间学习了。像前面提到的 Swing、AWT 这些东西早已经被淘汰了,还有像 Applet、JSP 这种的,如果大学还在教这些,真的是学生的不幸。

    与其把时间花费到这些没用的知识点上,真不如:

    1)痴迷于数据结构与算法

    算法题就好像科举考试时代背的八股文,是知识改变命运的代表作。你不刷,就很过算法题这一关,因为不仅要考,还能提高你的编程功底。我一直给大家推荐的 Java 版的 LeetCode 刷题笔记,一定要下载下来刷一刷(可以点击下面的链接去下载)。

    吃完 300 道 LeetCode 题后,我胖得快炸了!

    2)热衷于 ACM

    3)尝试 Unix、Linux 环境下编程

    4)醉心于网络编程和多线程编程,对 TCP/IP、HTTP 等网络协议有很深的理解

    好了,今天的分享就到这吧。

    我是二哥呀,希望能给学弟学妹们一些帮助和启发,记得点赞哟~

    展开全文
  • Java Swing 图形界面开发(目录)

    万次阅读 多人点赞 2017-05-30 23:50:42
    Java Swing 图形界面(GUI)开发基础教程(目录)

    本文链接: https://blog.csdn.net/xietansheng/article/details/72814492

    0. JavaSwing 简介

    1. JavaSwing 布局管理器

    2. JavaSwing 基本组件

    3. JavaSwing 面板组件

    4. JavaSwing 其他组件

    5. JavaSwing 相关特性

    扩展:Java AWT/Swing 其他相关


    展开全文
  • Java实现计算器信计,学生管理系统 2020-12-30 基于Idea2019的计算器设计 使用环境 Idea 2019,jdk1.8 计算机界面开发 创建计算机工程 略 使用的包 import java.awt.BorderLayout; import java.awt.Color; import...

    安农大18电子1班

    Java实现计算器信计树,学生管理系统

    2020-12-30

    基于Idea2019的计算器设计

    1. 使用环境
      Idea 2019,jdk1.8
    2. 计算机界面开发
    3. 创建计算机工程
    4. 使用的包
      import java.awt.BorderLayout;
      import java.awt.Color;
      import java.awt.Dimension;
      import java.awt.GridLayout;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.util.Arrays;
      import javax.swing.JButton;
      import javax.swing.JFrame;
      import javax.swing.JPanel;
      import javax.swing.JTextField;
    5. 使用的swing组件
      使用Jpanel的BorderLayout
    6. 创建”java软件实战”工程
      File->New->Project…

    首先写一个简单的界面包含以下27个符号
    {“7”,“8”,“9”,"/",“sqrt”,“4”,“5”,“6”,"*","%",“1”,“2”,“3”,"-",“1/x”,“0”,"+/-",".","+","=",“MC”,“MR”,“MS”,“M+”,“Back”,“CE”,“C”};

    界面使用BorderLayout布局,需要调用java.awt.BorderLayout分为north,left和center,center使用网格布局
    5. 增加监听事件
    使用JButton中的addActionListener对按钮实现监听

    1. 创建监听事件的外部处理函数和类
      使用到的类:actionListener
      实现功能:对键盘的结果的运算,将各种运算结果返回到text文本框内。

    2. 数字处理事件(±*/四则运算)
      定义MyMath类,对BigDecimal对象进行计算

    使用callMethod方法实现用if else语句实现对复杂按钮的处理判断

    1. 代码段:

    package calframe;

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Arrays;

    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;

    public class CalFrame extends JFrame {
    /**
    * 计算器的外观设计
    */
    private static final long serialVersionUID = 1L;
    private final static int PRE_WIDTH = 500;
    private final static int PRE_HEIGHT = 400;

    private JTextField text = null;
    private JButton button = null; //存储标记
    
    private String[] nOp = {"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
    private String[] mOp = {"MC","MR","MS","M+"};
    private String[] rOp = {"Back","CE","C"};
    private CalService service = new CalService();
    
    public CalFrame(){
        this.setTitle("计算器");
        this.setSize(PRE_WIDTH, PRE_HEIGHT);
        this.setLocationRelativeTo(null);
        this.setResizable(false);
    
        //添加底层
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout(10,1));
        panel.add(getTextField(), BorderLayout.NORTH);
        panel.setPreferredSize(new Dimension(PRE_WIDTH, PRE_HEIGHT));
    
        //WEST
        JButton[] mButton = getMButton();
        JPanel panel1 = new JPanel();
        panel1.setLayout(new GridLayout(5,1,0,5));
        for(JButton b : mButton ){
            panel1.add(b);
        }
        panel.add(panel1,BorderLayout.WEST);
        //
        JButton[] rButton = getRButton();
        JPanel panel2 = new JPanel();
        panel2.setLayout(new BorderLayout(1,5));
        JPanel panel21 = new JPanel();
        panel21.setLayout(new GridLayout(1,3,3,3));
        for(JButton b : rButton){
            panel21.add(b);
        }
        panel2.add(panel21,BorderLayout.NORTH);
    
        JButton[] nButton = getNButton();
        JPanel panel22 = new JPanel();
        panel22.setLayout(new GridLayout(4,5,3,5));
        for(JButton b : nButton){
            panel22.add(b);
        }
        panel2.add(panel22,BorderLayout.CENTER);
        panel.add(panel2,BorderLayout.CENTER);
    
        this.add(panel);
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        this.setVisible(true);
    
    
    }
    //返回显示框
    private JTextField getTextField(){
        text = new JTextField("0",10);
        //text.setSize(480, 50);
        return text;
    }
    //返回数字键
    private JButton[] getNButton(){
        String[] redButton = {"/","*","-","+","="};
        JButton[] nbutton = new JButton[nOp.length];
        for(int i = 0; i < this.nOp.length; i++){
            JButton b = new JButton(this.nOp[i]);
            b.addActionListener(getActionListener());
    
            Arrays.sort(redButton);
            if(Arrays.binarySearch(redButton, nOp[i]) >= 0){
                b.setForeground(Color.red);
            }else{
                b.setForeground(Color.blue);
            }
            nbutton[i] = b;
        }
        return nbutton;
    }
    //返回操作健
    private JButton[] getMButton(){
        JButton[] mbutton = new JButton[mOp.length + 1];
        mbutton[0] = getButton();
        for(int i = 0; i < this.mOp.length; i++){
            JButton b = new JButton(this.mOp[i]);
            b.addActionListener(getActionListener());
            b.setForeground(Color.red);
            mbutton[i+1] = b;
        }
        return mbutton;
    }
    private JButton[] getRButton(){
        JButton[] rbutton = new JButton[rOp.length];
        for(int i = 0; i < this.rOp.length; i++){
            JButton b = new JButton(this.rOp[i]);
            b.addActionListener(getActionListener());
            b.setForeground(Color.red);
            rbutton[i] = b;
        }
        return rbutton;
    }
    private JButton getButton(){
        button = new JButton();
        return button;
    }
    private ActionListener getActionListener(){
        ActionListener actionListener = new ActionListener() {
    
            @Override
            public void actionPerformed(ActionEvent e) {
                String cmd = e.getActionCommand();
                String result = null;
                try {
                    result = service.callMethod(cmd, text.getText());
                } catch (Exception e2) {
                    System.out.println(e2.getMessage());
                }
                if(cmd.indexOf("MC") == 0){
                    button.setText("");
                }else if(cmd.indexOf("M") == 0){
                    button.setText("M");
                }
                //显示计算结果
                if(result != null){
                    text.setText(result);
                }
    
            }
        };
        return actionListener;
    }
    public static void main(String[] args) {
        new CalFrame();
    }
    

    }

    package calframe;

    import java.math.BigDecimal;

    public class MyMath {
    /**
    * 为一个double类型创建BigDecimal对象
    */
    private static BigDecimal getBigDecimal(double number){
    return new BigDecimal(number);
    }
    public static double add(double num1, double num2) {
    BigDecimal first = getBigDecimal(num1);
    BigDecimal second = getBigDecimal(num2);
    return first.add(second).doubleValue();
    }
    public static double subtract(double num1, double num2) {
    BigDecimal first = getBigDecimal(num1);
    BigDecimal second = getBigDecimal(num2);
    return first.subtract(second).doubleValue();
    }
    public static double multiply(double num1, double num2) {
    BigDecimal first = getBigDecimal(num1);
    BigDecimal second = getBigDecimal(num2);
    return first.multiply(second).doubleValue();
    }
    public static double divide(double num1, double num2) {
    BigDecimal first = getBigDecimal(num1);
    BigDecimal second = getBigDecimal(num2);
    return first.divide(second,3,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    }

    package calframe;

    public class CalService {
    private boolean isSecondNum = false;
    private String lastOp;
    private String firstNum = “0”;
    private String secondNum = “null”;
    private double store;
    private String numString = “0123456789.”;
    private String opString = “±*/”;

    public String catNum(String cmd, String text) {
        String result = cmd;
        // 如果text不等于0
        if (!"0".equals(text)) {
            if (isSecondNum) {
                isSecondNum = false;
            } else {
                result = text + cmd;
            }
        }
        if (result.indexOf(".") == 0) {
            result = "0" + result;
        }
        return result;
    }
    
    public String setOp(String cmd, String text) {
        this.lastOp = cmd;
        this.firstNum = text;
        this.secondNum = null;
    
        this.isSecondNum = true;
        return null;
    }
    
    public String cal(String text, boolean isPercent) {
        double secondResult = secondNum == null ? Double.valueOf(text)
                .doubleValue() : Double.valueOf(secondNum).doubleValue();
    
        //除数为0
        if(secondResult == 0 && this.lastOp.equals("/")){
            return "0";
        }
    
        //有%
        if(isPercent){
            secondResult = MyMath.multiply(Double.valueOf(firstNum), MyMath.divide(secondResult, 100));
        }
        if(this.lastOp.equals("+")){
            firstNum = String.valueOf(MyMath.add(Double.valueOf(firstNum),secondResult));
        }else if (this.lastOp.equals("-")) {
            firstNum = String.valueOf(MyMath.subtract(Double.valueOf(firstNum),secondResult));
        }else if (this.lastOp.equals("*")) {
            firstNum = String.valueOf(MyMath.multiply(Double.valueOf(firstNum),secondResult));
        }else if (this.lastOp.equals("/")) {
            firstNum = String.valueOf(MyMath.divide(Double.valueOf(firstNum),secondResult));
        }
    
        secondNum = secondNum == null ? text :secondNum;
        this.isSecondNum = true;
        return firstNum;
    }
    //求开方
    public String sqrt(String text){
        this.isSecondNum = true;
        return String.valueOf(Math.sqrt(Double.valueOf(text)));
    }
    //求倒数
    public String setReciprocal(String text){
        if (text.equals("0")){
            return text;
        }else{
            this.isSecondNum = true;
            return String.valueOf(MyMath.divide(1, Double.valueOf(text)));
        }
    }
    //存储
    public String mCmd(String cmd,String text){
        if(cmd.equals("M+")){
            store = MyMath.add(store, Double.valueOf(text));
        }else if (cmd.equals("MC")) {
            store = 0;
        }else if (cmd.equals("MR")) {
            isSecondNum = true;
            return String.valueOf(store);
        }else if (cmd.equals("MS")) {
            store = Double.valueOf(text).doubleValue();
        }
        return null;
    }
    
    public String backSpace(String text){
        return text.equals("0") || text.equals("") ? "0" :text.substring(0,text.length()-1);
    }
    
    public String setNegative(String text){
        if(text.indexOf("-") == 0){
            return text.substring(1,text.length());
        }else{
            return "-" + text;
        }
    }
    public String clearAll(){
        this.firstNum = "0";
        this.secondNum = null;
        return this.firstNum;
    }
    public String clear(String text){
        return "0";
    }
    
    public String callMethod(String cmd, String text){
        if(cmd.equals("C")){
            return clearAll();
        }else if(cmd.equals("CE")){
            return clear(text);
        }else if (cmd.equals("Back")) {
            return backSpace(text);
        }else if (numString.indexOf(cmd) != -1) {
            return catNum(cmd, text);
        }else if (opString.indexOf(cmd) != -1) {
            return setOp(cmd, text);
        }else if (cmd.equals("+/-")) {
            return setNegative(text);  //设置正负号
        }else if(cmd.equals("1/x")){
            return setReciprocal(text);
        }else if (cmd.equals("sqrt")) {
            return sqrt(text);
        }else if(cmd.equals("%")){
            return cal(text, true);
        }else if(cmd.equals("=")){
            return cal(text, false);
        }else {
            return mCmd(cmd, text);
        }
    }
    

    }

    基于Idea2019的信计院树设计
    3. 使用环境
    Idea 2019,jdk1.8
    4. 计算机界面开发
    9. 创建计算机工程

    10. 使用的包
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    import javax.swing.;
    import javax.swing.event.TreeSelectionEvent;
    import javax.swing.event.TreeSelectionListener;
    import javax.swing.tree.
    ;
    11. 使用的swing组件
    使用Jpanel的BorderLayout
    12. 创建”java软件实战”工程

    1. 创建项目文件xinjishu,创建包xinjitree,创建class文件setup登录界面,创建gettxtfile通过io流实现数据的缓存,创建treetu实现树型界面设计。
      File->New->Project…

      2.首先写一个简单的界面包含一个按钮Button,JButton button = new JButton(“welcome setup computer science colleage system!”);在这里注意需要声明可视化setVisible为true
      如下图所示

    实现对当前button的关闭和打开下一个box的步骤
    使用dispose函数实现对当前button的关闭
    创建一个close函数
    public static void close() {
    frame.dispose();}
    在监听器中添加关闭界面功能以及打开下一个树界面功能

    1. 对文件的读取的设计
      import java.io.FileInputStream;
      import java.io.InputStreamReader;
      import java.io.BufferedReader;
      使用while循环实现对txt文件中每一行的读取。

    2. 树的设计
      使用到的类:addition
      实现功能:对键盘的结果的运算,将各种运算结果返回到text文本框内。
      如图所示:

    3. 代码段
      package xinjitree;
      import java.io.FileInputStream;
      import java.io.InputStreamReader;
      import java.io.BufferedReader;

    public class gettxtfile{

    public static String readFiles(String path) throws Exception {

      BufferedReader read = new BufferedReader(new InputStreamReader(new FileInputStream(path), "UTF-8"));
    
      StringBuffer s = new StringBuffer();
      
      String hang = read.readLine();
      
      while (hang != null) {
      
         s.append(hang);
      
         s.append("\n");
      
         hang = read.readLine();
      
      }
      
      read.close();
      
      return s.toString();
    

    }

    }

    package xinjitree;

    import javax.swing.;
    import javax.swing.event.TreeSelectionEvent;
    import javax.swing.event.TreeSelectionListener;
    import javax.swing.tree.
    ;

    public class treetu{
    JFrame frame1 = new JFrame(“javatree”);
    JTree shu;
    DefaultMutableTreeNode root = new DefaultMutableTreeNode(“信息与计算机学院”);
    DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(“电子信息”);
    DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(“计算机工程”);
    DefaultMutableTreeNode node3 = new DefaultMutableTreeNode(“网络工程”);
    DefaultMutableTreeNode node4 = new DefaultMutableTreeNode(“通信工程”);
    DefaultMutableTreeNode node5 = new DefaultMutableTreeNode(“18电子1班”);
    DefaultMutableTreeNode node6 = new DefaultMutableTreeNode(“18电子2班”);
    DefaultMutableTreeNode node7 = new DefaultMutableTreeNode(“18电子3班”);
    DefaultMutableTreeNode node8 = new DefaultMutableTreeNode(“18计算机1班”);
    DefaultMutableTreeNode node9 = new DefaultMutableTreeNode(“18计算机2班”);
    DefaultMutableTreeNode node10 = new DefaultMutableTreeNode(“18计算机3班”);
    DefaultMutableTreeNode node11 = new DefaultMutableTreeNode(“18网络1班”);
    DefaultMutableTreeNode node12 = new DefaultMutableTreeNode(“18网络2班”);
    DefaultMutableTreeNode node13 = new DefaultMutableTreeNode(“18通信1班”);
    DefaultMutableTreeNode node14 = new DefaultMutableTreeNode(“18通信2班”);
    JTextArea eventTxt = new JTextArea(5, 20);

    public void addition() {
    root.add(node1);
    root.add(node2);
    root.add(node3);
    root.add(node4);
    node1.add(node5);
    node1.add(node6);
    node1.add(node7);
    node2.add(node8);
    node2.add(node9);
    node2.add(node10);
    node3.add(node11);
    node3.add(node12);
    node4.add(node13);
    node4.add(node14);
    shu = new JTree(root);
    TreeSelectionModel selectionModel = shu.getSelectionModel();
    selectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    eventTxt.setText("");
    shu.addTreeSelectionListener(new TreeSelectionListener() {

         public void valueChanged(TreeSelectionEvent e) {
    
            DefaultMutableTreeNode panelpoint = (DefaultMutableTreeNode) shu.getLastSelectedPathComponent();
    
            switch (panelpoint.toString()) {
    
            case "18电子1班": {
               try {
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子1班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
            case "18电子2班": {
               try {
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子2班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
            case "18电子3班": {
               try {
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18电子3班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
            case "18计算机1班": {
               try {
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机1班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
            case "18计算机2班": {
               try {
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机2班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
            case "18计算机3班": {
               try {
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18计算机3班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
            case "18网络1班": {
               try {     
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18网络1班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
            case "18网络2班": {
               try {
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18网络2班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
            case "18通信1班": {
               try {
                  eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18通信1班.txt"));
               } catch (Exception a) {
                  a.printStackTrace();
               }
            }
               break;
               case "18通信2班": {
                  try {
                     eventTxt.setText(gettxtfile.readFiles("D:\\txt\\18通信2班.txt"));
                  } catch (Exception a) {
                     a.printStackTrace();
                  }
               }
               break;
            }
         }
      });
      Box box = Box.createHorizontalBox();
      box.add(new JScrollPane(shu));
      box.add(new JScrollPane(eventTxt));
      frame1.add(box);
      frame1.pack();
      frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame1.setVisible(true);
    

    }
    }

    package xinjitree;

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;

    class setup {
    static JFrame frame = new JFrame();

    public static void main(String[] args) {
    frame.setSize(600, 600);
    JButton button = new JButton(“welcome setup computer science colleage system!”);
    frame.add(button);
    frame.setVisible(true);
    button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    close();//关闭button
    new treetu().addition();//开始打开下一个树界面
    }
    });
    }

    public static void close() {
    frame.dispose();
    }
    }

    展开全文
  • JAVA实现文件树

    千次阅读 2009-03-06 23:40:00
    你想你的Swing程序拥有像资源管理器一样的树吗?...那就看看我下面实现文件树代码public class ExplorerTree extends JPanel { private JTree tree; private TreePath treePath; public ExplorerTree() {
  • Java Swing 图形界面开发简介

    万次阅读 多人点赞 2017-05-30 23:52:47
    Java Swing GUI 图形界面窗口开发基础教程,本教程将系统性地详细介绍 ...Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯 Java 实现,能够更好的兼容跨平台运行。Java Swing 图形界面开发目录
  • java swing tree的懒加载, 下载文件导入eclipse可直接运行。
  • 它可以打开文本文件,并输出文本文件的位置和内容。其中用到了菜单、工具栏以及选项卡等组件,是一个综合类的应用,主要实现步骤如下。 (1) 创建一个 TextFileOpener 类并继承 JFrame 父类。 import java.awt....
  • java Swing带复选框的

    2013-10-28 14:08:35
    自己做的java复选框实现的时候费了不少功夫,现在将文件添加到自己的代码里就可以使用。
  • Java学习之Swing简介

    2019-02-13 11:36:45
    Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯 Java 实现,能够更好的兼容跨平台运行。 为了和 AWT 组件区分,Swing 组件在 javax.swing.* 包下,类名均以 J 开头,例如: JFrame、JLabel、JButton等。 2. ...
  • 0、实现一个文件系统 (1)功能要求 a)界面上显示形目录结构 b)根节点是“我的电脑” c)“我的电脑”下有几个盘符(C、D、E等)就有几个子节点,递归显示文件系统下的所有文件信息(分支可以是目录也可以是文件...
  • 该项目的目标是提供具有文件系统目录层次结构的Java Swing JTree模型的高效且便捷的实现(例如,用于目录选择器组件)。 提供了一个演示应用程序。 参见org.swingk.io.dirtree.demo.Demo 。 该库被打包为Java 9...
  • Java swing组件介绍

    万次阅读 多人点赞 2018-07-29 14:58:47
    本文链接: ... Java Swing 图形界面开发(目录) 1. Swing简介 SwingJava 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分。 Swing 包含了构建图...
  • Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯 Java 实现,能够更好的兼容跨平台运行。 为了和 AWT 组件区分,Swing 组件在javax.swing.*包下,类名均以 J 开头,例如: JFrame、JLabel、JButton等。 2. ...
  • 文章目录Swing图形用户界面编程Java图形用户界面技术Swing技术基础Swing类层次结构Swing程序结构创建JFrame方式继承JFrame方式事件处理模型采用内部类处理事件采用Lambda表达式处理事件使用适配器布局管理FlowLayout...
  • java swing 资源管理器

    2009-06-29 18:39:43
    java swing实现树结构的资源管理器 双击直接运行就可以,jar包中有源代码
  • Java Swing

    2011-06-29 16:28:00
    要写个能编辑管理"项目"和其中文件的编辑器,用到JTree,JTextArea我嘞个去, 没事还是不要用JTree~~ 先说说java graphics通过调用drawLine(), drawString(), 来绘制。里面的东西没办法控制自己的外观和位置,全依靠...
  • java swing篇之推箱子小游戏实现及见解 swing介绍 swingjava里的一个包,是程序员在图像方面编程的接口,包含了GUI(graphical user interface)图形用户界面组件(文本框,按钮,表)等等 说到swing不得不提一下...
  • java swing

    2017-06-12 12:22:09
    以前接触java感觉其在桌面开发上,总是不太方便,没有一个好的拖拽界面布局工具,可以快速构建窗体. 最近学习了一下NetBeans IDE 8.1,感觉其窗体设计工具还是很不错的 , 就尝试一下做了一个窗体应用程序. 总体下来,感觉...
  • Java -Swing-学习笔记

    2020-02-09 20:58:03
    Java -Swing-学习笔记 文章目录Java -Swing-学习笔记1. 基本组件2. 特殊容器2.1 JSplitPane2.2 JTabbedPane2.3 JLayeredPane、JDesktopPane、JInternalFrame3.拖放功能4.Java7新增的Swing功能4.1 用JLayer装饰组件...
  • 一、Java Swing 编程程 Java Swing JFrame和JPanel:窗口容器和面板容器 Java Swing 布局管理器 Java Swing JLable:标签组件 Java Swing JButton:按钮组件 Java Swing JTextField:单行文本框组件 Java Swing ...
  • 0. JavaSwing 简介 Java Swing 图形界面开发简介 1. JavaSwing 布局管理器 JavaSwing_1.1: FlowLayout(流式布局) JavaSwing_1.2: GridLayout(网格布局) JavaSwing_1.3: GridBagLayout(网格袋布局) JavaSwing_...
  • 前言:在开发java swing窗体程序时可能遇到以下的需求,比如要显示一个文件目录结构,文件目录,有不同的分类,不同分类下有多个条目项。这就需要用到组件。当需要显示一个表格,整齐的显示,就像excel那种形式...
  • Swing学习15:Java Swing JSlider

    千次阅读 2020-03-13 15:12:58
    Swing 还提供了很多高级组件,如菜单栏、工具栏、文件选择器、表格以及等。使用这些高级组件可以实现更为复杂的布局,也可以使程序界面更加人性化,以提高程序的灵活性。在之后的章节中,我们将开始详细介绍这些...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,323
精华内容 3,329
关键字:

java文件树swing实现

java 订阅