对数据库执行一个查询,把获得的结果集通过JTable显示,当查询变化时,如何使JTable的显示内容随之变化。
我查阅了一些资料,如果不是操作数据库,JTable的validate()和updateUI()可以更新JTable的显示内容,可对数据库操作时,这两个方法好像就不起作用了。
对数据库执行一个查询,把获得的结果集通过JTable显示,当查询变化时,如何使JTable的内容变化
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- iteye_14762 2008-08-14 21:33关注
JTable的实现是基于MVC的, 所以JTabel的数据显示是一个独立的model的, JTable#setModel(TableModel dataModel)就是来设置model的, 所以你如果想动态显示数据, 你需要实现一个TableModel, 下面以一个User对象为例来说明这个情况!User可能来自你的数据库查询, 也就是一个实体:
[code="java"]
class User {
private String id;
private String name;
public User() {
}
public User(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
[/code]
下面是实现的一个TableModel:
[code="java"]
class UserTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
// 保存一个User的列表
private List users = new ArrayList();
// 设置User列表, 同时通知JTabel数据对象更改, 重绘界面
public void setUsers(List users) {
this.users = users;
this.fireTableDataChanged();// 同时通知JTabel数据对象更改, 重绘界面
}
public int getColumnCount() {
return 2;
}
public int getRowCount() {
return users.size();
}
// 从list中拿出rowIndex行columnIndex列显示的值
public Object getValueAt(int rowIndex, int columnIndex) {
User user = users.get(rowIndex);
if (columnIndex == 0) {
return user.getId();
} else {
return user.getName();
}
}
}
[/code]
可以写一个main方法测试一下:
[code="java"]
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setBounds(100, 100, 500, 375);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JTable table = new JTable(); final UserTableModel userTableModel = new UserTableModel(); userTableModel.setUsers(Arrays.asList(new User("1", "fuxueliang"))); table.setModel(userTableModel); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add("Center", table); JButton button = new JButton("Change Model"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String current = String.valueOf(System.currentTimeMillis()); // 注意:这里修改了UserTableModel的list, 这个list可以是你从数据库上查出来的 userTableModel.setUsers(Arrays.asList(new User("2", current))); } }); frame.getContentPane().add("South", button); frame.setVisible(true); }
[/code]
总的来说, 也不是很复杂, 具体的可以参看JavaDoc.希望对你有所帮助.本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的