JTable刷新数据

JTable刷新数据_第1张图片
要写一个图书管理系统的查询功能。
需求:输入关键字,点击搜索按钮后查询数据库,在JTable上刷新查询的结果。
查询实现方式:在JPanel上添加JScrollPane,把JTable 添加到scroll上去。
尝试过的方法
清除JPanel上的组件过后添加上新的数据

JTable table = ...;  // 提交查询后返回新的数据填入table
JScrollPane scroll = new JScrollPane(table);
panel.add(scroll);

发现table内容并未刷新。
接着尝试重新绘制面板:

removeAll(); //清楚所有组件
repaint();  // 重新绘制面板
updateUI(); //更新组件
revalidate(); //重新validate

以上的方法都可以成功更新面板上的组件,比如添加JLabel,添加新的JButton之类的,但无法刷新表格内容。

继续搜索发现JTable用的是MVC模式,所以应该通过变更它的数据源,也就是它的Model来实现视图的刷新。创建JTable

JTable table = new JTable();

不传入参数,表示使用默认模型DefaultTableModel,还可以通过实现抽象类AbstractTableModel来自定义Model。为了省事我直接用了DefaultTableModel

// 首先抓取model
DefaultTableModel tModel = new DefaultTableModel(Object[][] data, Object[] columnNames); 
// 应用model到table
table = new JTable(tModel);

// 点击搜索按钮触发事件,用setDataVector()方法来更新Model的数据
tModel.setDataVector(Object[][] data, Object[] columnNames);

然后就可以看到面板上数据刷新了:
JTable刷新数据_第2张图片

你可能感兴趣的:(Java)