学习内容:

      创建树

      Swing 使用JTree对象来代表一棵树,JTree树中结点可以使用TreePath来标识,该对象封装了当前结点及其所有的父结点。
       当一个结点具有子结点时,该结点有两种状态:
        展开状态:当父结点处于展开状态时,其子结点是可见的;

        折叠状态:当父结点处于折叠状态时,其子结点都是不可见的。
        如果某个结点是可见的,则该结点的父结点(包括直接的、间接的父结点)都必须处于展开状态,只要有任意一个父结点处于折叠状态,该结点就是不可见的。

      JTree生成的树默认是不可编辑的,不可以添加、删除结点,也不可以改变结点数据:如果想让某个JITree对象变成可编辑状态,则可以调用JITree的setEditable(boolean b)方法,传入true即可把这棵树变成可编辑的树(可以添加、删除结点,也可以改变结点数据)。

      编辑树结点的步骤︰

      1.获取当前被选中的结点∶

        获取当前被选中的结点,会有两种方式:

        一:
        通过JTree对象的某些方法,例如TreePath getselectionPath()等,得到一个TreePath对象,包含了从根结点到当前结点路径上的所有结点;

        调用TreePath对象的object getLastpathcomponent()方法,得到当前选中结点

        二:
        调用JTree对象的 object getLastselectedPathcomponent()方法获取当前被选中的结点
      ⒉.调用DefaultTreeModel数据模型有关增删改的一系列方法完成编辑,方法执行完后,重绘JTree

     为ITree添加监听器:

      1.addTreeExpansionListener(TreeExpansionListener tel):添加树节点展开/折叠事件的监听器。

      2. addTreeSelectionListener(TreeSelectionListener tsl):添加树节点选择事件的监听器。

  
     修改JTree的选择模式∶
      JTree专门提供了一个TreeSelectionModel对象来保存该Tree选中状态的信息。也就是说,JTree组件背后隐藏了两个model对象,其中TreeModel用于保存该JIree 的所有节点数据,而TreeSelectionModel用于保存该JTree的所有选中状态的信息。
      程序可以改变Tree的选择模式,但必须先获取该ree对应的TreeSelectionModel对象,再调用该对象的setSelectionMode(int mode);方法来设置该ITree的选择模式,其中model可以有如下3种取值:
      1.TreeSelectionModeI.CONTIGuOUS_TREE_SELECTION:可以连续选中多个TreePath 。            

      2.TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION:该选项对于选择没有任何限制。      

      3.TreeSelectionModeI.SINGLE_TREE_SELECTION:每次只能选择一个 TreePath。

     使用DefaultTreeCellRenderer改变结点外观

      JTree默认的外观是比较单一的,它提供了如下几种改变结点外观的方式:
        1.使用DefaultTreeCellRenderer直接改变节点的外观,这种方式可以改变整棵树所有节点的字体、颜色和图标。
        2.为JITree 指定DefaultTreeCellRenderer的扩展类对象作为JTree的节点绘制器,该绘制器负责为不同节点使用不同的字体、颜色和图标。通常使用这种方式来改变节点的外观。
        3.为JTree指定一个实现 TreeCellRenderer 接口的节点绘制器,该绘制器可以为不同的节点自由绘制任意内容,这是最复杂但最灵活的节点绘制器。
      第一种方式最简单,但灵活性最差,因为它会改变整棵树所有节点的外观。在这种情况下,Jtree的所有节点依然使用相同的图标,相当于整体替换了]tree中节点的所有默认图标。用户指定的节点图标未必就比JITree默认的图标美观。

     扩展DefaultTreeCellRenderer改变结点外观

      DefaultTreeCellRenderer 实现类实现了TreeCellRenderer接口,该接口里只有一个用于绘制节点内容的方法:getTreeCellRendererComponent(),该方法负责绘制JTree节点。学习List的时候,如果要绘制List的列表项外观的内容,需要实现ListcellRenderer接口,通过重写getTreeCellendererComponent()方法返回一个Component对象,该对象就是JTree的节点组件。两者之间非常类似
      DefaultTreeCellRende rer类继承了lLabel,实现getTreeCellendererComponent()方法时返回this,即返回一个特殊的儿Label对象。如果需要根据节点内容来改变节点的外观,则可以再次扩展DefaultTreeCellRenderer类,并再次重写它提供的 getTreeCellRendererComponent()方法。

  

      实现TreeCellRenderer接口改变结点外观
      这种改变结点外观的方式是最灵活的,程序实现TreeCellRenderer接口时同样需要实现getTreecellRendererComponent()方法,该方法可以返回任意类型的组件,该组件将作为JTree的结点。通过这种方式可以最大程度的改变结点的外观。

      编辑表格

      JTable调整列宽:

        JTable使用TableColumn来表示表格中的每一列,JTable 中表格列的所有属性,如最佳宽度、是否可调整宽度、最小和最大宽度等都保存在该TableColumn中。

      JTable调整表格选择模式:
        与List类似的是,JTable使用了一个 ListSelectionModel表示该表格的选择状态,程序可以通过ListSelectionModel.setSelectionMode(int mode)控制JTable 的选择模式。

  

      自定义TableModel步骤:

      1.自定义类,继承AbstractTableModel抽象类,重写下面几个方法︰
        int getcolumncount():返回表格列的数量
        int getRowCount()∶返回表格行的数量
        object getvalueAt(int rowIndex,int columnIndex):返回rowIndex行,column列的单元格的值string getcolumnName(int columnIndex):返回columnIndex列的列名称
        boolean iscellEditable(int rowIndex,int columnIndex):设置rowIndex行,columnIndex列单元格是否可编辑
      2.创建自定义类对象,根据该对象,创建JTable对象

      不仅用户可以扩展 AbstractTableModel抽象类,Swing本身也为AbstractTableModel提供了一个DefaultTableModel实现类,程序可以通过使用DefaultTableModel实现类来创建JITable对象。通过DefaultTableModel对象创建JTable对象后,就可以调用它提供的方法来添加数据行、插入数据行、删除数据行和移动数据行。
    

明天内容:

      用户登录案例

遇到问题:

      无

学习java 7.27的更多相关文章

  1. 推介一个学习JAVA的系列教程-狗鱼IT教程

    介绍一个学JAVA的零基础学习JAVA的网站,推介一个学习JAVA的系列教程-狗鱼IT教程 下面是java的系教程: 1、[java教程]Java 教程 2、[java教程]Java 简介 3、[ja ...

  2. 学习java之基础语法(三)

    学习java之基础语法(三) java运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运 ...

  3. 零基础如何学习java更有效呢?

    零基础学java,不知道该如何入手?也不知道学习的方向,很多人会问零基础怎么样学习,有没有什么入门的书籍推荐:只要方法正确,零基础学好java也是有机会的哦. 一.理解Java思想 Java是一门面向 ...

  4. 积极主动敲代码,使用Junit学习Java程序设计

    积极主动敲代码,使用JUnit学习Java 早起看到周筠老师在知乎的回答软件专业成绩很好但是实际能力很差怎么办?,很有感触. 从读大学算起,我敲过不下100本程序设计图书的代码,我的学习经验带来我的程 ...

  5. 如何接触学习java

    信息科技必将是未来的潮流,Java语言必将在时代的进步中发挥不可估量的作用,未来,掌握好一门实用而且有良好应用前景的技术是你们的首要任务. 零基础怎么学Java 多年Java教育培训经验事实表明,零基 ...

  6. 零基础如何系统学习Java Web

    零基础如何系统学习Java Web?   我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...

  7. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  8. 《疯狂Java讲义》(一) ---- 关于学习Java的反思

    "听到Spring很火,就立马买来一本Spring的书来读,最后结果往往是失败,因为这种学习没有积累,没有根基,学习过程中困难重重,每天都被一些相同.类似的问题所困扰,起初热情十足,经常上论 ...

  9. 十天来学习java的心得体会

    有关学习java是几天来的心得体会: 十天学习java遇到很多问题,每个问题都是经过反复的看书本以及上网查找资料来解决的,发现这一点真的需要自己来而不是去遇到什么问题就去依靠他人(师兄.同学).在其中 ...

随机推荐

  1. 使用vsftpd 搭建ftp服务

    ftp 基础服务器基础知识 ftp有三种登录方式.匿名登录(所有用户).本地用户.虚拟用户(guest). FTP工作模式 主动模式:服务端从20端口主动向客户端发起链接. 控制端口21:数据传输端口 ...

  2. 记一次线上环境 ES 主分片为分配故障

    故障前提 ElasticSearch 版本:5.2 集群节点数:5 索引主分片数:5 索引分片副本数:1 线上环境ES存储的数据量很大,当天由于存储故障,导致一时间 5个节点的 ES 集群,同时有两个 ...

  3. (转)刚来的大神彻底干掉了代码中的if else...

    一旦代码中 if-else 过多,就会大大的影响其可读性和可维护性. 首先可读性,不言而喻,过多的 if-else 代码和嵌套,会使阅读代码的人很难理解到底是什么意思.尤其是那些没有注释的代码. 其次 ...

  4. 性能工具之代码级性能测试工具ContiPerf

    前言 做性能的同学一定遇到过这样的场景:应用级别的性能测试发现一个操作的响应时间很长,然后要花费很多时间去逐级排查,最后却发现罪魁祸首是代码中某个实现低效的底层算法.这种自上而下的逐级排查定位的方法, ...

  5. React-Router学习(基础路由与嵌套路由)

    示例:基本路由 在这个例子中,我们有3个'Page'组件处理<Router>. 注意:而不是<a href="/">我们使用<Link to=&quo ...

  6. Python多版本共存的方法

    目录 Python2.Python3共存的方法 python2下载及环境变量配置 第一步.打开Python官网,下载Python2 第二步.python2环境变量配置 测试结果 Python2.Pyt ...

  7. [luogu7468]愤怒的小N

    定义$count(x)$为$x$二进制下1的个数,答案即$\sum_{0\le x<n,count(x)\equiv 1(mod\ 2)}f(x)$ 考虑预处理出$S_{k,i,p}=\sum_ ...

  8. linux的ip文件参数说明

    TYPE=Ethernet # 网卡类型:为以太网 PROXY_METHOD=none # 代理方式:关闭状态 BROWSER_ONLY=no # 只是浏览器:否 BOOTPROTO=dhcp # 网 ...

  9. vue属性绑定不能用双括号表达式

  10. layui页面操作,点击一个添加页面,跳转有确定,然后点击确定后将选择的几个数据返回前一个页面获取值,然后ajax请求后台

    custUserIndex.html [添加页面代码] <!DOCTYPE html> <html> <head> <meta charset="u ...