Java Swing之JTable举例

        JTable 是一个 Java Swing 组件,用于在用户界面上展示和操作表格数据。它是 Java Swing 的一部分,遵循 Model-View-Controller (MVC) 设计模式。JTable 仅作为视图来展示数据,真正的数据存储和管理是由 TableModel 接口的实现类负责的。

        在 JTable 中,表头(TableHeader)和每一列(TableColumn)都可以被单独处理,并且可以定制化显示各种类型的数据,如复选框(checkbox)、图像(img)等。JTable 还支持行和列的增删改查操作,并可以通过自定义渲染器(renderer)和编辑器(editor)来改变单元格和表头的显示方式和交互行为。

        此外,JTable 还支持ToolTip(工具提示),可以为每个单元格或整个表头提供额外的信息,并且可以响应单元格值的变化,执行相应的操作。

        在编程中,开发者可以通过继承 JTable 并重载相关方法来实现特定的功能需求,也可以通过实现 TableModel 接口来创建自定义的数据模型。

        一、常用构造方法

       1. public JTable(Object[][] rowData,Object []columnnames)

        创建一个JTable对象,设置显示数据和表格的标题

        2.public JTable(Vector rowData,Vector columnNames)

        创建一个JTable对象,通过Vector设置显示数据和显示的标题

        3.public JTable(TableModel dm)

        使用TableModel创建表格

        二、常用方法

        1.setModel(TableModel dataModel): 设置表格的数据模型 (TableModel)。

        2.getRowCount(): 获取表格的行数。

  3.getColumnCount(): 获取表格的列数。

  4.setRowHeight(int row, int height): 设置指定行的高度。

  5.getColumnWidth(int column): 获取指定列的宽度。

  6.setColumnWidth(int column, int width): 设置指定列的宽度。

   7.getValueAt(int row, int column): 获取指定单元格的值。

   8.setalueAt(Object value, int row, int column): 设置指定单元格的值。

   9.getCellEditor(int row, int column): 获取指定单元格的编辑器

  10.getCellRenderer(int row, int column): 获取指定单元格的渲染器

   11.getSelectedRow(): 获取当前选中行的索引。

   12.getSelectedRows(): 获取所有选中行的索引数组。

   13.getColumnClass(int col):获取指定列的数据类型。

   14.addRow(Object[] rowData):添加一行数据。

   15.removeRow(int row):移除指定行。

   16.isCellEditable(int row, int col):判断指定单元格是否可编辑。

         JTable还有其他的方法,本文仅列出部分,更多请查看官网的说明文档

        三、JTable组件的应用举例

        根据JTable类的构造方法,可以采取不同的形式创建表格对象。下面分别以JTable(Object[][] rowData,Object []columnnames)和JTable(TableModel dm)构造方法为例说明如何创建表格。

        1.使用JTable(Object[][] rowData,Object []columnnames)构造方法创建表格
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.text.TableView;

public class TableDemo extends JFrame {

    public String [][]students = {
            {"1001","张三","23","职业学院","软件技术专业"},
            {"1002","李四","22","职业学院","软件技术专业"},
            {"1003","王五","21","职业学院","软件技术专业"},
            {"1004","赵六","20","职业学院","软件技术专业"}
    };
    public String []tableheader = {"学号","姓名","年龄","学校","专业"};
    public TableDemo(){
        initTableNoModel();//使用JTable(row[][],colu[])创建表格
    }
    public static void main(String args[]){
        new TableDemo();
    }

    //使用JTable(object[][] rowdatas,object []columnames)构造方法创建一个JTable实例
    public void initTableNoModel(){
        JTable studentTable = new JTable(students,tableheader);//创建表格对象
        TableColumn stucolumn = null;
        int counts = studentTable.getColumnCount();//获取表格行数
        for(int i=0;i<counts;i++)
        {
            stucolumn = studentTable.getColumnModel().getColumn(i);
            stucolumn.setPreferredWidth(100);//为表格列设置宽度
        }
        studentTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//关闭表格自动设定大小
        JScrollPane tablesp = new JScrollPane(studentTable);//为表格添加滚动条
        tablesp.setSize(400,300);


        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.add(tablesp);//将表格对象添加到JFrame中
        this.pack();
        this.setVisible(true);

    }   

}

     运行以上程序,结果显示如下图所示。

2.使用JTable(TableModel dm)构造方法创建表格
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.text.TableView;

public class TableDemo extends JFrame {

    public String []tableheader = {"学号","姓名","年龄","学校","专业"};
    public TableDemo(){
        initTableWithModel();//使用DefaultTableModel创建表格
    }
    public static void main(String args[]){
        new TableDemo();
    }
  
    //使用DefaultTableModel创建表格,第一个参数是表头,第二个参数表示行数
    public    void initTableWithModel(){
        //创建一个以给定数组为表头、行数为0的表格模型
        DefaultTableModel tableModel = new DefaultTableModel(tableheader,0);
        //使用一个循环语句为表格模型添加数据
        for(int i=1;i<10;i++){
            String row[]={"100"+i,"学生"+i,"21","职业学院","软件技术"};
            tableModel.addRow(row);//向模型中添加行
        }
        JTable stutable = new JTable(tableModel);//以模型为参数创建表格对象

        stutable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);//禁止表格自动适应列宽
        JScrollPane jsp = new JScrollPane(stutable);//为表格添加滚动条
        jsp.setSize(500,400);

        this.add(jsp);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        this.pack();

    }

}

        运行以上程序,结果显示如下图所示。

        JTable类还有众多的方法可以在设置表格格式上起到很好的作用。假设创建的表格对象为stutable,使用的表格模型对象是stumodel,以下代码可以扩展表格的相关应用。

//stutable是创建的表格对象,stumodel是数据模型

//设置表格排序器--单击列标题实现升序、降序排序
stutable.setRowSorter(new TableRowSorter(stumodel));
		
//设置表格的高度
stutable.setRowHeight(40);
		
//设置单元格的字体
stutable.setFont(new Font("微软雅黑",Font.PLAIN,15));
		
//设置边框样式与颜色
stutable.setBorder(BorderFactory.createLineBorder(Color.BLUE));
		
//设置表格单行选择模式
stutable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

//设置表格多行选择模式,ctrl+鼠标多选
stutable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

        关于JTable更多的应用,请读者参考相关说明文档。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值