首页 > 技术文章 > 【Java】JTable的数据刷新

AllenMi 2020-06-11 23:57 原文

前言

这段时间在写一个大实验,水果超市管理系统,yes,我觉得挺大的,但是就当成了一个实验,接下来还有一个课程设计和一个实训,more bigger...

问题

在我把其他的都写好的时候去写UI层,发现,我的表格刷新是一个大问题,那么究竟怎么灵活的设置表格中的数据呢?

这就不得不提一下TableModel这个怪东西了

TableModel:

public interface TableModelTableModel 接口指定了 JTable 用于询问表格式数据模型的方法。
只要数据模型实现了 TableModel 接口,就可以通过以下两行代码设置 JTable 显示该模型:
TableModel myData = new MyTableModel();
JTable table = new JTable(myData);

DefaultTableModel(Object[][] data, Object[] columnNames)

构造一个 DefaultTableModel,并通过将 data 和 columnNames 传递到 setDataVector 方法来初始化该表。

JTable:

DefaultTableModel 是一个模型实现,它使用一个 Vector 来存储所有单元格的值,该 Vector 由包含多个 Object 的 Vector 组成。除了将数据从应用程序复制到 DefaultTableModel 中之外,还可以用 TableModel 接口的方法来包装数据,这样可将数据直接传递到 JTable,如上例所示。这通常可以提高应用程序的效率,因为模型可以自由选择最适合数据的内部表示形式。

以上来自JavaAPI

人话说

TableModel就是存放JTable表格数据的东西

下面是一个简单的demo,希望对你有帮助

package test;

import javax.swing.*;
import javax.swing.table.*;

public class TableTest extends JFrame {
	private JLabel title = new JLabel("水果列表");		//上部标题
	private JScrollPane pane = new JScrollPane();	//表格滚动面板
	private JTable table = new JTable();			//水果表格
	
	public TableTest() {
		init();//窗口初始化
		addComponent();//添加表格
		updateTable();//刷新表格数据
	}
	public static void main(String[] args) {
		new TableTest();
	}
	//窗口初始化
	public void init() {
 		this.setTitle("水果管理系统!");
 		this.setSize(600, 420);
 		this.setResizable(false);
 		this.setLocationRelativeTo(null);
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 		this.setVisible(true);
 	}
	//添加表格
	public void addComponent() {
		this.setLayout(null);//设置绝对布局
 		//添加标题
 		title.setBounds(265, 20, 70, 25);
 		this.add(title);
 		//表格
 		table.getTableHeader().setReorderingAllowed(false);//列不能移动
 		table.getTableHeader().setResizingAllowed(false);//不可拉动表格
 		table.setEnabled(false);//表格不可更改数据
 		pane.setBounds(50, 50, 500, 200);
 		pane.setViewportView(table);//滚动面板显示表格数据
 		this.add(pane);
	}
	//刷新表格数据
	public void updateTable() {
		String[] title = {"水果编号","水果名称","水果单价(/元)","计价单位"};
		Object[][] rowData = {
			{1,"苹果",5.5,"kg"}
		};
		
		TableModel dataModel = new DefaultTableModel(rowData, title);
 		table.setModel(dataModel);
	}
}

推荐阅读