JTable表格实现动态更新的两种方式

JTable表格的构造方法

JTable()
构造一个默认 JTable是使用默认的数据模型,默认的列模型和默认的选择模型对其进行初始化。
JTable(int numRows, int numColumns)
构造一个 JTable与 numRows和 numColumns使用空单元格 DefaultTableModel 。
JTable(Object[][] rowData, Object[] columnNames)
构造一个 JTable以显示二维数组中的值 rowData ,列名称为 columnNames 。
JTable(TableModel dm)
构造一个 JTable ,它以 dm为数据模型,默认列模型和默认选择模型。
JTable(TableModel dm, TableColumnModel cm)
构造一个 JTable ,它以 dm作为数据模型 cm , cm作为列模型,以及默认选择模型。
JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm)
构造一个 JTable ,它以 dm作为数据模型 cm , cm作为列模型, sm作为选择模型。
JTable(Vector rowData, Vector columnNames)

方法一
通过表格方法updateUI配合Vector使用


import java.awt.Container;
import java.awt.Font;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Demo extends JFrame {
    private static final long serialVersionUID = 1L;
    public Container panel = null;
    private JScrollPane jsp;
    private JTable studentTable;;
    private JButton cancleButton;
    private Vector<Vector<String>> vs;
    String[][] str1 = { { "1", "2", "3" }, { "11", "22", "33" } };
    String[][] str3 = { { "4", "5", "6" }, { "44", "55", "66" } };

    String[] str2 = { "第一行", "第二行", "第三行" };

    public Demo() {
        panel = this.getContentPane();
        panel.setLayout(null);
        List<String> list = Arrays.asList("第一行", "第二行", "第三行");
        Vector<String> v = new Vector<String>(list);

        vs = new Vector<Vector<String>>();

        List<String> list1 = Arrays.asList("1", "2", "3");
        Vector<String> v1 = new Vector<String>(list1);

        List<String> list2 = Arrays.asList("11", "22", "33");
        Vector<String> v2 = new Vector<String>(list2);

        List<String> list3 = Arrays.asList("111", "222", "333");
        Vector<String> v3 = new Vector<String>(list3);

        vs.add(v1);
        vs.add(v2);
        vs.add(v3);

        studentTable = new JTable(vs, v);
        studentTable.setFont(new Font("宋体", Font.BOLD, 40));
        studentTable.setRowHeight(40);

        jsp = new JScrollPane(studentTable);
        jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        panel.add(jsp);
        jsp.setBounds(160, 100, 500, 400);

        cancleButton = new JButton("删除");
        cancleButton.addActionListener(e -> remove());

        panel.add(cancleButton);

        cancleButton.setBounds(360, 510, 100, 50);
        studentTable.updateUI();

        this.setLocation(450, 200);
        this.setSize(800, 650);
        this.setVisible(true);

    }

    private void remove() {
        int i = studentTable.getSelectedRows().length - 1;
        while (i >= 0) {
            // System.out.println(studentTable.getSelectedRows()[i--]);
            vs.remove(studentTable.getSelectedRows()[i--]);
            studentTable.updateUI();
        }
    }

    public static void main(String[] args) {
        new Demo();
    }
}

方法二
使用TableModel构造Jtable 在TableModel内调用fireTableDataChanged()方法,使表格进行动态刷新

通过每次调用refrese()方法,刷新表格内数据


public class MyTableModel extends AbstractTableModel {

    private final String[] columnNames = {"编号","教师信息","教授科目","电话号码","信息标题"};
    private Object[][] rowData = null; 

    public MyTableModel(Object[][] rowData) {
        this.rowData = rowData;
    }
    @Override
    public int getRowCount() {
        return rowData.length;
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public String getColumnName(int columnIndex) {
        return columnNames[columnIndex];
    }
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return rowData[rowIndex][columnIndex];
    }
    public void refresh(Object[][] rowData){
        this.rowData = rowData;
        this.fireTableDataChanged();
    }
}
  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java数据库查询结果的输出 摘自:北京海脉信息咨询有限公司   利用Java开发数据库应用时,经常需要在用户界面上显示查询结果。我们可以利用Vector、JTable、AbstractTableModel等三个类较好地解决这一问题。 类Vector:   定义如下: public class Vector extends AbstractList implements List , Cloneable , Serializable{…} 类JTable:   JTable组件是Swing组件中比较复杂的小件,隶属于javax.swing包,它能以二维表的形式显示数据。类Jtable: 定义如下: public class JTable extends JComponent implements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible{…} 类AbstractTableModel:   定义如下: public abstract class AbstractTableModel extends Object implements TableModel, Serializable{…}   生成一个具体的TableModel作为AbstractTableMode的子类,至少必须实现下面三个方法: public int getRowCount(); public int getColumnCount(); public Object getValueAt(int row, int column);   我们可以建立一个简单二维表(5×5): TableModel dataModel = new AbstractTableModel() { public int getColumnCount() { return 5; } public int getRowCount() { return 5;} public Object getValueAt(int row, int col) { return new Integer(row*col); } }; JTable table = new JTable(dataModel); JScrollPane scrollpane = new JScrollPane(table); 数据库及其连接方法:   我们采用Sybase数据库,数据库存放在数据库服务器中。路径为:D:WORKER,数据库名为:worker.dbf。具有以下字段: 字段名 类型 Wno(职工号) VARCHAR Wname(职工名) VARCHAR Sex(性别) VARCHAR Birthday(出生日期) DATE Wage(工资) FLOAT   要连接此数据库,需使用java.sql包中的类DriverManager。此类是用于管理JDBC驱动程序的实用程序类。它提供了通过驱动程序取得连接、注册,撤消驱动程序,设置登记和数据库访问登录超时等方法。   具体连接方法如下:   定位、装入和链接SybDriver类。 driver="com.sybase.jdbc.SybDriver"; SybDriver sybdriver=(SybDriver) Class.forName(driver).newInstance();   注册SybDriver类。 DriverManager.registerDriver(sybdriver);   取得连接(SybConnection)对象引用。 user="sa"; password=""; url="jdbc:sybase:Tds:202.117.203.114:5000/WORKER"; SybConnection connection= (SybConnection)DriverManager.getConnection (url,user,password); 建立完连接后,即可通过Statement接口进行数据库的查询与更改。 实现方法:   对象声明。   AbstractTableModel tm;   //声明一个类AbstractTableModel对象   JTable jg_table;//声明一个类JTable对象   Vector vect;//声明一个向量对象   JScrollPane jsp;//声明一个滚动杠对象   String title[]={"职工号","职工名",   "性别","出生日期","工资"};   //二维表列名   定制表格。   实现抽象类AbstractTableModel对象tm中的方法:   vect=new Vector();//实例化向量   tm=new AbstractTableModel(){   public int getColumnCount(){   return title.length;}//取得表格列数   public int getRowCount(){   return vect.size();}//取得表格行数   public Object getValueAt(int row,int column){   if(!vect.isEmpty())   return   ((Vector)vect.elementAt(row)).elementAt(column);   else   return null;}//取得单元格中的属性值   public String getColumnName(int column){   return title[column];}//设置表格列名   public void setValueAt   (Object value,int row,int column){}   //数据模型不可编辑,该方法设置为空   public Class getColumnClass(int c){   return getValueAt(0,c).getClass();   }//取得列所属对象类   public boolean isCellEditable(int row,int column){   return false;}//设置单元格不可编辑,为缺省实现   };   定制表格:   jg_table=new JTable(tm);//生成自己的数据模型   jg_table.setToolTipText("显示全部查询结果");   //设置帮助提示   jg_table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);   //设置表格调整尺寸模式   jg_table.setCellSelectionEnabled(false);   //设置单元格选择方式   jg_table.setShowVerticalLines(true);//   设置是否显示单元格间的分割线   jg_table.setShowHorizontalLines(true);   jsp=new JScrollPane(jg_table);//给表格加上滚动杠   显示查询结果。   连接数据库:已给出。   数据库查询:   Statement stmt=connection.createStatement();   ResultSet rs=stmt.executeQuery   ("select * from worker");   显示查询结果:   vect.removeAllElements();//初始化向量对象   tm.fireTableStructureChanged();//更新表格内容   while(rs.next()){   Vector rec_vector=new Vector();   //从结果集中取数据放入向量rec_vector中   rec_vector.addElement(rs.getString(1));   rec_vector.addElement(rs.getString(2)); rec_vector.addElement(rs.getString(3)); rec_vector.addElement(rs.getDate(4));   rec_vector.addElement(new Float(rs.getFloat(5)));   vect.addElement(rec_vector);   //向量rec_vector加入向量vect中   }   tm.fireTableStructureChanged();   //更新表格,显示向量vect的内容   实现示图中记录前翻、后翻的效果,有两种方法:   如果软件环境支持JDBC2.0,可直接利用rs.prevoius()和rs.next()获得记录,然后通过类JTextField中的setText()方法,显示出各个字段值。   如果不支持JDBC2.0,则可利用向量Vector按行取出JTable中数据。自定义一个指针,用来记录位置。当指针加1时,取出上一行数据放入Vector中显示;指针减1时,取出下一行数据显示。显示方法同上。
Java经典编程源码例程,可以做为你的学习设计参考。 第1章 Java语言概述 1 实例001 输出“Hello World” 2 实例002 输出控制台传递的参数 2 实例003 输出由“*”组成的三角形 3 实例004 输出符号表情 5 第2章 Eclipse开发工具 6 实例005 下载并运行Eclipse工具 7 实例006 为Eclipse安装中文包 8 实例007 使用Eclipse注释代码 10 实例008 使用Eclipse格式化代码 11 实例009 安装WindowBuilder插件 12 实例010 开发计算器界面 14 第3章 Java语言基础 15 实例011 输出错误信息与调试信息 16 实例012 从控制台接收输入字符 16 实例013 重定向输出流实现程序日志 17 实例014 自动类型转换与强制类型转换 19 实例015 加密可以这样简单(位运算) 20 实例016 用三元运算符判断奇数和偶数 21 实例017 不用乘法运算符实现2×16 22 实例018 实现两个变量的互换 (不借助第3个变量) 23 第4章 流程控制 25 实例019 判断某一年是否为闰年 26 实例020 验证登录信息的合法性 27 实例021 为新员工分配部门 28 实例022 用switch语句根据消费 金额计算折扣 29 实例023 判断用户输入月份的季节 31 实例024 使用while循环语句与自增 运算符循环遍历数组 33 实例025 使用for循环输出杨辉三角形 34 实例026 使用嵌套循环在控制台上 输出九九乘法表 35 实例027 使用while循环计算1+ 1/2!+1/3!…1/20! 36 实例028 使用for循环输出空心的菱形 38 实例029 终止循环体 39 实例030 循环体的过滤器 41 第5章 数组及其常用操作 43 实例031 获取一维数组的最小值 44 实例032 将二维数组中的行列互换 45 实例033 利用数组随机抽取幸运观众 47 实例034 用数组设置JTable表格的 列名与列宽 49 实例035 使用按钮控件数组实现 计算器界面 51 实例036 通过复选框控件数组实现 添加多个复选框控件 52 实例037 使用选择排序法对数组排序 53 实例038 使用冒泡排序法对数组排序 55 实例039 使用快速排序法对数组排序 57 实例040 使用直接插入法对数组排序 59 实例041 使用sort()方法对数组排序 61 实例042 反转数组中元素的顺序 63 第6章 面向对象入门 65 实例043 自定义图书类 66 实例044 温度单位转换工具 67 实例045 成员变量的默认初始化值 68 实例046 单例模式的应用 69 实例047 汉诺塔问题求解 70 实例048 编写同名的方法 71 实例049 构造方法的应用 72 实例050 统计图书的销售量 73 实例051 两只完全相同的宠物 74 实例052 重新计算对象的哈希码 76 实例053 使用字符串输出对象 77 实例054 Java对象的假克隆 78 实例055 Java对象的浅克隆 80 实例056 Java对象的深克隆 82 实例057 序列化与对象克隆 84 实例058 深克隆效率的比较 87 第7章 面向对象进阶 89 实例059 经理与员工的差异 90 实例060 重写父类中的方法 92 实例061 计算几何图形的面积 93 实例062 简单的汽车销售商场 95 实例063 使用Comparable接口自定 义排序 96 实例064 策略模式的简单应用 98 实例065 适配器模式的简单应用 100 实例066 普通内部类的简单应用 102 实例067 局部内部类的简单应用 103 实例068 匿名内部类的简单应用 104 实例069 静态内部类的简单应用 105 实例070 实例化Class类的几种方式 107 实例071 查看类的声明 108 实例072 查看类的成员 110 实例073 查看内部类信息 112 实例074 动态设置类的私有域 113 实例075 动态调用类中方法 115 实例076 动态实例化类 116 实例077 创建长度可变的数组 117 实例078 利用反射重写toString()方法 119 第8章 字符串与包装类 121 实例079 将数字格式化为货币字符串 122 实例080 货币金额大写格式 123 实例081 String类格式化当前日期 125 实例082 字符串大小写转换 1
实现 JTable 数据的动态更新可以通过以下步骤完成: 1. 创建 JTable 对象并设置表格模型。 2. 创建一个数据模型并将其与表格模型绑定。 3. 创建一个数据源,可以是数据库或者其他数据来源。 4. 将数据源中的数据填充到数据模型中。 5. 将数据模型中的数据更新表格模型中。 6. 调用 JTable 的 repaint() 方法刷新表格。 下面是一个简单的示例代码,演示了如何在 JTable实现数据动态更新: ```java import javax.swing.*; import javax.swing.table.DefaultTableModel; public class DynamicTableDemo extends JFrame { private DefaultTableModel model; private JTable table; public DynamicTableDemo() { // 创建表格模型 model = new DefaultTableModel(new String[]{"ID", "Name", "Age"}, 0); // 创建 JTable 并设置表格模型 table = new JTable(model); // 将 JTable 添加到窗口 add(new JScrollPane(table)); // 添加数据 addData(1, "Alice", 25); addData(2, "Bob", 30); addData(3, "Charlie", 35); // 设置窗口参数 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setLocationRelativeTo(null); setVisible(true); } private void addData(int id, String name, int age) { // 添加数据到数据模型中 model.addRow(new Object[]{id, name, age}); // 刷新 JTable table.repaint(); } public static void main(String[] args) { new DynamicTableDemo(); } } ``` 在上面的示例中,我们创建了一个 JTable 并设置了表格模型。然后通过调用 addData() 方法向表格中添加数据。在 addData() 方法中,我们首先向数据模型中添加数据,然后调用 JTable 的 repaint() 方法刷新表格。这样就可以实现 JTable 数据的动态更新了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值