zoukankan      html  css  js  c++  java
  • 根据查询更新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);
      }
    
    }

    运行结果:

  • 相关阅读:
    如何快速取得股票交易历史数据
    ArcSDE性能优化系列之ArcSDE参数篇
    2020年8月29日
    2020年8月31日
    9.2
    2020年8月25日
    2020年8月30日
    2020年8月27日
    2020年8月26日
    2020年8月28日
  • 原文地址:https://www.cnblogs.com/CryOnMyShoulder/p/8679180.html
Copyright © 2011-2022 走看看