关于 javaSwing 数据绑定及刷新 @
简介 @
最近学校期末了,正在进行 java 实训,实训要做一个图书管理系统。对于实现 mysql 数据库数据在 JTable 上的绑定,以及数据更新后界面的刷新时,遇到了问题。由于我对于 JavaSwing 完全不了解 ,实训时也是现学现卖,所以不清楚如何将数据绑定到 JTable 上。看了很多 CSDN 的博客,最后采用了以下方法。
关于数据绑定的实现 @
首先创建针对数据的模型类,以下的模型类是基于自定义 Book 表的简单示范
/*book_list*/
public class book_list extends javax.swing.table.DefaultTableModel{
Class[] types = new Class[] { java.lang.Object.class, java.lang.String.class,
java.lang.String.class};
public book_list() {
super(new Object[][] {}, new String[] { "bookname", "booktype"});
}}
然后对数据表进行填充,创建 book 对象,读取数据库中的数据后进行对象的赋值。利用循环将所有数据存入 List 中,而后利用循环从 List 中依次取得对象,并将各属性存入 boo_list 创建的对象中。然后创建 JTable 实体用 model 进行填充。这样可以将数据库的信息转换成可以填充 JTable 的对象。从而完成数据绑定的操作。
//图书表的创建
public static book_list model2 = new book_list();
public static JTable table2 = new JTable(model2);
ArrayList<Book> list = new ArrayList<Book>();
try {
sqlBookcod sql = new sqlBookcod();
ResultSet rs = sql.searchBook();
while (rs.next()) {
Book book = new Book();
book.setName(rs.getString("bookname"));
book.setBookType(rs.getString("booktype"));
list.add(book);
}
}catch(SQLException e) {
e.printStackTrace();
}
for (int i = 0; i < list.size(); i++) {
Book b = (Book) list.get(i);
model2.addRow(new Object[] {b.getName(),b.getBookType()});
}}
数据更新 @
当时进行数据绑定后,直接将 table 添加到 panel 中,当数据更新后,table 中的数据已经被定死了。所以我采用了简单粗暴的方法,通过监听菜单栏的点击事件,直接删除 table 中的所有数据,然后重新进行填充,并删除 panel 中的 table 控件,重新添加 table,从而实现数据表的更新。
//图书表清空数据
public static void delmodel2() {
model2 = new book_list();
table2 = new JTable(model2);
}
public void stateChanged(ChangeEvent e) {
if(tabbedPane.getSelectedIndex() == 0) {
panel1.remove(p1); //删除panel1中原有的组件
tablepan.delmodel1(); //删除数据表内容
p1 = tablepan.createTextPanel1(); //重新填充数据表
panel1.add(p1);
panel1.repaint(); //对panel1本身进行重绘
}
}