服务器之家

服务器之家 > 正文

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

时间:2019-12-02 14:11     来源/作者:Java教程网

一:表格(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<DefaultTableModel>(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:

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

代码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:

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

二:(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:

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

示例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:

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

标签:

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
返回顶部