根据查询更新JTable显示(转)

原文链接:https://blog.csdn.net/yuqinying112/article/details/6968827

JTable的实现是基于MVC的, 所以JTabel的数据显示是一个独立的model的, JTable#setModel(TableModel dataModel)就是来设置model的, 所以你如果想动态显示数据, 你需要实现一个TableModel, 下面以一个User对象为例来说明这个情况!User可能来自你的数据库查询, 也就是一个实体:

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;  
    }  
}  
class UserTableModel extends AbstractTableModel {  
    private static final long serialVersionUID = 1L;  
    // 保存一个User的列表  
    private List<User> users = new ArrayList<User>();  
    // 设置User列表, 同时通知JTabel数据对象更改, 重绘界面  
    public void setUsers(List<User> 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();  
        }  
    }  
}  
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

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

public class userjtable {
  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可以是你从数据库上查出来的
        List l = new ArrayList();
        for(int i=0;i<10;i++){
            l.add(new User("2", current));
        }
        //userTableModel.setUsers(Arrays.asList(new User("100", current)));
        userTableModel.setUsers(l);
      }
    });
    frame.getContentPane().add("South", button);
    frame.setVisible(true);
  }

}

运行结果:

原文地址:https://www.cnblogs.com/CryOnMyShoulder/p/8679180.html