热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

JavaSwing中的表格(JTable)和树(JTree)组件使用实例

这篇文章主要介绍了JavaSwing中的表格(JTable)和树(JTree)组件使用实例,本文同时讲解了表格和树的基本概念、常用方法、代码实例,需要的朋友可以参考下

一:表格(JTable):

1.基本概念:

表格(JTable)是Swing 新增加的组件,主要是为了将数据以表格的形式显示.给显示大块数据提供了简单的机制.

2.常用构造方法:

 * JTable():使用系统默认的模型创建一个JTable 实例.
 * JTable(int numRows,int numColumns):创建一个使用DefaultTableModel 指定行、列的空表格。
 * JTable(Object[ ][ ] rowData,Object[ ][ ] columnNames):创建一个显示二维数据的表格。

可以直接使用表格列名数组和表格数据数组来创建表格.

 * JTable(TableModel dm):创建一个指定数据模式和默认字段模式的JTable 实例。

通常用数据模型类的对象来保存数据,而表格模型是通过表格列名数组和表格数据数组来创建的.

3.常用方法:

4.综合案例:

代码1:

代码如下:

public class JTableDemo1 extends JFrame { 
 
    //定义表格 
    JTable table; 
    //定义滚动条面板(用以使表格可以滚动) 
    JScrollPane scrollPane; 
    //定义数据模型类的对象(用以保存数据), 
    DefaultTableModel tableModel; 
 
    public JTableDemo1() { 
        super(); 
        setTitle("表格模型与表格"); 
 
        scrollPane = new JScrollPane(); 
         
        // 定义表格列名数组 
        String[] columnNames = { "A", "B","C" }; 
        // 定义表格数据数组 
        String[][] tableValues = { { "A1", "B1","C1" }, { "A2", "B2","C2" }, 
                { "A3", "B3","C3" }, { "A4", "B4","C4" } }; 
 
        // 创建指定表格列名和表格数据的表格模型类的对象 
        tableModel = new DefaultTableModel(tableValues, columnNames); 
        // 创建指定表格模型的表格 
        table = new JTable(tableModel); 
 
        //设置 RowSorter(RowSorter 用于提供对 JTable 的排序和过滤)。 
        table.setRowSorter(new TableRowSorter(tableModel)); 
        scrollPane.setViewportView(table); 
        getContentPane().add(scrollPane, BorderLayout.CENTER); 
 
        setBounds(300, 200, 400, 300); 
        setVisible(true); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
 
    public static void main(String args[]) { 
        new JTableDemo1(); 
    } 
}

截图1:

代码2:

代码如下:

import java.awt.*; 
import javax.swing.*; 
 
public class JTableDemo3 { 
 
    JFrame frame; 
    JPanel panel; 
    JScrollPane scrollPane1, scrollPane2, scrollPane3; 
    JTable jtable1, jtable2, jtable3; 
 
    public JTableDemo3() { 
        frame = new JFrame("JTableDemo"); 
 
        jtable1 = new JTable(8, 6); 
 
        final Object[] columnNames = { "姓名", "性别", "家庭地址",// 列名最好用final修饰 
                "电话号码", "生日", "工作", "收入", "婚姻状况", "恋爱状况" }; 
        Object[][] rowData = { 
                { "ddd", "男", "江苏南京", "1378313210", "03/24/1985", "学生", "寄生中", 
                        "未婚", "没" }, 
                { "eee", "女", "江苏南京", "13645181705", "xx/xx/1985", "家教", "未知", 
                        "未婚", "好象没" }, 
                { "fff", "男", "江苏南京", "13585331486", "12/08/1985", "汽车推销员", 
                        "不确定", "未婚", "有" }, 
                { "ggg", "女", "江苏南京", "81513779", "xx/xx/1986", "宾馆服务员", 
                        "确定但未知", "未婚", "有" }, 
                { "hhh", "男", "江苏南京", "13651545936", "xx/xx/1985", "学生", "流放中", 
                        "未婚", "无数次分手后没有" } }; 
 
        jtable2 = new JTable(rowData, columnNames); 
 
        jtable3 = new JTable(rowData, columnNames); 
        jtable3.setPreferredScrollableViewportSize(new Dimension(600, 100));// 设置表格的大小 
        jtable3.setRowHeight(30);// 设置每行的高度为20 
        jtable3.setRowHeight(0, 20);// 设置第1行的高度为15 
        jtable3.setRowMargin(5);// 设置相邻两行单元格的距离 
        jtable3.setRowSelectionAllowed(true);// 设置可否被选择.默认为false 
        jtable3.setSelectionBackground(Color.white);// 设置所选择行的背景色 
        jtable3.setSelectionForeground(Color.red);// 设置所选择行的前景色 
        jtable3.setGridColor(Color.red);// 设置网格线的颜色 
        jtable3.selectAll();// 选择所有行 
        jtable3.setRowSelectionInterval(0, 2);// 设置初始的选择行,这里是1到3行都处于选择状态 
        jtable3.clearSelection();// 取消选择 
        jtable3.setDragEnabled(false);// 不懂这个 
        jtable3.setShowGrid(true);// 是否显示网格线 
        jtable3.setShowHorizontalLines(true);// 是否显示水平的网格线 
        jtable3.setShowVerticalLines(true);// 是否显示垂直的网格线 
        jtable3.setValueAt("tt", 0, 0);// 设置某个单元格的值,这个值是一个对象 
        jtable3.doLayout(); 
        jtable3.setBackground(Color.cyan); 
 
        // JTable最好加在JScrollPane上以实现滚动效果 
        scrollPane1 = new JScrollPane(jtable1); 
        scrollPane2 = new JScrollPane(jtable2); 
        scrollPane3 = new JScrollPane(jtable3); 
 
        panel = new JPanel(new GridLayout(0, 1)); 
        panel.setPreferredSize(new Dimension(600, 400)); 
        panel.setBackground(Color.black); 
        panel.add(scrollPane1); 
        panel.add(scrollPane2); 
        panel.add(scrollPane3); 
 
        frame.setContentPane(panel); 
        frame.pack(); 
        frame.setVisible(true); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
 
    public static void main(String[] args) { 
        new JTableDemo3(); 
    } 
}

截图2:

二:树(JTree):

1.基本概念:

  树(JTree):将分层数据集显示为轮廓的控件。

2.常用构造方法:

   JTree():返回带有示例模型的JTree。

   JTree(Object[] value):返回JTree,指定数组的每个元素作为不被显示的新根节点的子节点。

   //只有这个构造函数可以创建多个根结点
   JTree(Object[] value):返回 JTree,指定数组的每个元素作为不被显示的新根节点的子节点。

   JTree(TreeNode root):返回 JTree,指定的 TreeNode 作为其根,它显示根节点。

   JTree(TreeNode root, boolean asksAllowsChildren):返回 JTree,指定的 TreeNode 作为其根,
   它用指定的方式显示根节点,并确定节点是否为叶节点。(true设置为可添加孩子结点,再添加孩子结点).

3.代码演示:

示例1:

代码如下:

public class JTreeDemo1 { 
     
    JFrame f;  
    Box box; 
    JTree jTree1,jTree2; 
     
    public JTreeDemo1() 
    { 
        f = new JFrame(" JTreeDemo1 "); 
        box = Box.createHorizontalBox(); //创建Box 类对象 
         
        jTree1 = new JTree(); 
        jTree2 = new JTree(); 
         
        //向此组件添加任意的键/值 
        jTree1.putClientProperty("JTree.lineStyle", "Angled");  
         
        //向Box 容器添加滚动面板 
        box.add(new JScrollPane(jTree1), BorderLayout.WEST); 
        box.add(new JScrollPane(jTree2), BorderLayout.EAST); 
         
        f.getContentPane().add(box, BorderLayout.CENTER); 
         
        f.setSize(300, 240); 
        //f.pack(); 
        f.setLocation(300, 200); 
        f.setVisible(true); 
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
     
    public static void main(String[] args) { 
        new JTreeDemo1(); 
    } 
}

截图1:

示例2:

代码如下:

public class JTreeDemo2 { 
 
    JFrame f;  
    JPanel p;  
    JTree jTree1,jTree2,jTree3,jTree4,jTree5,jTree6,jTree7; 
     
    public JTreeDemo2() { 
         
        f = new JFrame(" JTreeDemo2 "); 
         
        // 构造函数:JTree() 
        jTree1 = new JTree(); 
         
        // 构造函数:JTree(Object[] value) 
        Object[] letters = { " a ", " b ", " c ", " d ", " e " }; 
        jTree2 = new JTree(letters); 
 
        // 构造函数:JTree(TreeNode root)(TreeNode空) 
        // 用空结点创建树 
        DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(); // 定义树结点 
        jTree3 = new JTree(node1); // 用此树结点做参数调用 JTree的构造函数创建含有一个根结点的树 
 
        // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空) 
        // 用一个根结点创建树 
        DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(" Color "); 
        jTree4 = new JTree(node2); // 结点不可以颜色,默认为白面黑字 
        jTree4.setBackground(Color.lightGray); 
 
         
        // 构造函数:JTree(TreeNode root, boolean 
        // asksAllowsChildren)(同上,只是TreeNode又有不同) 
        // 使用DefaultMutableTreeNode类先用一个根结点创建树,设置为可添加孩子结点,再添加孩子结点 
        DefaultMutableTreeNode color = new DefaultMutableTreeNode(" Color ", 
                true); 
         
        DefaultMutableTreeNode gray = new DefaultMutableTreeNode(" Gray "); 
        gray.add(new DefaultMutableTreeNode(" Lightgray ")); 
        gray.add(new DefaultMutableTreeNode(" Darkgray ")); 
         
        color.add(gray); 
         
        color.add(new DefaultMutableTreeNode(" Red ")); 
        color.add(new DefaultMutableTreeNode(" Green ")); 
 
        jTree5 = new JTree(color); 
 
         
        // 构造函数:JTree(TreeNode root)(同上,只是TreeNode非空) 
        // 通过逐个添加结点创建树 
        DefaultMutableTreeNode biology = new DefaultMutableTreeNode(" Biology "); 
        DefaultMutableTreeNode animal = new DefaultMutableTreeNode(" Animal "); 
        DefaultMutableTreeNode mammal = new DefaultMutableTreeNode(" Mammal "); 
        DefaultMutableTreeNode horse = new DefaultMutableTreeNode(" Horse "); 
        mammal.add(horse); 
        animal.add(mammal); 
        biology.add(animal); 
         
        jTree6 = new JTree(biology); 
        horse.isLeaf(); 
        horse.isRoot(); 
 
         
        // 构造函数:JTree(TreeModel newModel) 
        // 用DefaultMutableTreeNodel类定义一个结点再用这个结点做参数定义一个用DefaultTreeMode 
        // 创建一个树的模型,再用JTree的构造函数创建一个树 
        DefaultMutableTreeNode root = new DefaultMutableTreeNode(" Root1 "); 
        DefaultMutableTreeNode child1 = new DefaultMutableTreeNode(" Child1 "); 
        DefaultMutableTreeNode child11 = new DefaultMutableTreeNode(" Child11 "); 
        DefaultMutableTreeNode child111 = new DefaultMutableTreeNode( 
                " Child111 "); 
        root.add(child1); 
        child1.add(child11); 
        child11.add(child111); 
 
        DefaultTreeModel model = new DefaultTreeModel(root); 
 
        jTree7 = new JTree(model); 
 
         
        p = new JPanel(); 
        p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); 
        p.setPreferredSize(new Dimension(700, 400)); 
         
        // JTree必须放在JScrollPane上 
        p.add(new JScrollPane(jTree1));  
        p.add(new JScrollPane(jTree2)); 
        p.add(new JScrollPane(jTree3)); 
        p.add(new JScrollPane(jTree4)); 
        p.add(new JScrollPane(jTree5)); 
        p.add(new JScrollPane(jTree6)); 
        p.add(new JScrollPane(jTree7)); 
 
         
        f.setContentPane(p); 
        f.pack(); 
        f.setLocation(300, 200); 
        f.setVisible(true); 
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
 
    public static void main(String[] args) { 
         
        new JTreeDemo2(); 
     
    } 
}

截图2:


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 胡蜂能进行逻辑推理的研究成果
    最新研究表明,胡蜂具备一定的逻辑推理能力,能够进行传递性推理。研究人员通过实验发现,胡蜂在避免电击的测试中,能够正确选择符合逻辑的选项。这项研究成果对于了解无脊椎动物的认知能力具有重要意义,也为解析胡蜂社会结构的进化提供了线索。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 本文介绍了电流源并联合并的方法,以及谐振电路的原理。谐振电路具有很强的选频能力,通过将电感和电容连接在一起,电流和电压会产生震荡。谐振频率的大小取决于电感和电容的大小,而电路中的电阻会逐渐降低震荡的幅度。电阻和电容组成的电路中,当电容放完电后,电阻两端的电压为0,电流不再流过电容。然而,电感是一种特殊的器件,当有电流流过时,线圈会产生感应磁场,阻止电流的流动,从而使电流不会减小。 ... [详细]
  • 标题: ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了Java的公式汇总及相关知识,包括定义变量的语法格式、类型转换公式、三元表达式、定义新的实例的格式、引用类型的方法以及数组静态初始化等内容。希望对读者有一定的参考价值。 ... [详细]
author-avatar
乐在hhh其中
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有