Java UPDATE语句后JTable未刷新

Java UPDATE语句后JTable未刷新,java,swing,user-interface,jtable,tablemodel,Java,Swing,User Interface,Jtable,Tablemodel,大家好,这里是我们的社区。执行UPDATE语句后刷新JTable时出现问题。我在自己的TableModel类中创建了一个tableUpdate方法,但它似乎不起作用。我在下面的类中的ActionListener中调用它。如果有人能告诉我我做错了什么,我将不胜感激 class MyTableModel extends AbstractTableModel { /** * */ private sta

大家好,这里是我们的社区。执行UPDATE语句后刷新JTable时出现问题。我在自己的TableModel类中创建了一个tableUpdate方法,但它似乎不起作用。我在下面的类中的ActionListener中调用它。如果有人能告诉我我做错了什么,我将不胜感激

class MyTableModel extends AbstractTableModel {
        /**
                 *
                 */
        private static final long serialVersionUID = 1L;
        private List<Member> members = new ArrayList<Member>();

        public MyTableModel(List<Member> members) {
                this.members = members;
        }

        public void addMember(Member m) {
                members.add(m);
                int row = members.size() - 1;
                fireTableRowsInserted(row, row);
        }

        public void removeMemberFromTable(int row) {
                members.remove(row);
                fireTableRowsDeleted(row, row);
        }

        public void tableUpdate(int row, Member m) {
                members.set(row, m);
                fireTableDataChanged();
        }

        public List<Member> getMembers() {
                return new ArrayList<Member>(members);
        }

        @Override
        public int getColumnCount() {
                return 8;
        }

        @Override
        public int getRowCount() {
                return members.size();
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
                Member m = members.get(rowIndex);

                switch (columnIndex) {
                case 0:
                        return m.getMemberId();

                case 1:
                        return m.getfName();

                case 2:
                        return m.getlName();

                case 3:
                        return m.getAddress();

                case 4:
                        return m.getZipCode();

                case 5:
                        return m.getCity();

                case 6:
                        return m.getEmail();

                case 7:
                        return m.getPhoneNo();

                default:
                        return "";
                }
        }

        public String getColumnName(int column) {
                switch (column) {
                case 0:
                        return "MedlemsID";

                case 1:
                        return "Fornavn";

                case 2:
                        return "Efternavn";

                case 3:
                        return "Adresse";

                case 4:
                        return "Postnummer";

                case 5:
                        return "By";

                case 6:
                        return "Email";

                case 7:
                        return "Telefonnr";
                default:
                        return "";
                }
        }

        public Class<?> getColumnClass(int columnIndex) {
                switch (columnIndex) {
                case 1:
                        return Integer.class;

                case 2:
                        return String.class;

                case 3:
                        return String.class;

                default:
                        return String.class;
                }
        }
}
类MyTableModel扩展了AbstractTableModel{ /** * */ 私有静态最终长serialVersionUID=1L; 私有列表成员=新的ArrayList(); 公共MyTableModel(列表成员){ 这个.成员=成员; } 公共无效添加成员(成员m){ 成员.添加(m); int row=members.size()-1; 已插入的防火表行(行,行); } public void removemberfromtable(int行){ 成员。删除(世界其他地区); fireTableRowsDeleted(行,行); } 公共void tableUpdate(int行,成员m){ 成员集(行,m); fireTableDataChanged(); } 公共列表getMembers(){ 返回新的ArrayList(成员); } @凌驾 public int getColumnCount(){ 返回8; } @凌驾 public int getRowCount(){ 返回成员。size(); } @凌驾 公共对象getValueAt(int行索引、int列索引){ 成员m=成员.get(rowIndex); 开关(列索引){ 案例0: 返回m.getMemberId(); 案例1: 返回m.getfName(); 案例2: 返回m.getlName(); 案例3: 返回m.getAddress(); 案例4: 返回m.getZipCode(); 案例5: 返回m.getCity(); 案例6: 返回m.getEmail(); 案例7: 返回m.getPhoneNo(); 违约: 返回“”; } } 公共字符串getColumnName(int列){ 开关(列){ 案例0: 返回“MedlemsID”; 案例1: 返回“Fornavn”; 案例2: 返回“Efternavn”; 案例3: 返回“地址”; 案例4: 返回“Postnummer”; 案例5: 返回“通过”; 案例6: 返回“电子邮件”; 案例7: 返回“telefonr”; 违约: 返回“”; } } 公共类getColumnClass(int columnIndex){ 开关(列索引){ 案例1: 返回Integer.class; 案例2: 返回字符串.class; 案例3: 返回字符串.class; 违约: 返回字符串.class; } } }
editBtn.addActionListener(新ActionListener(){ @凌驾 已执行的公共无效操作(操作事件e){ int zipCode=Integer.parseInt(zipCodeTF.getText()); Member m=新成员(fNameTF.getText(),lNameTF.getText(), addressTF.getText(),zipCode,cityTF.getText(), emailTF.getText(),phoneNoTF.getText()); MemberMapper mMapper=新的MemberMapper(); inti=gui.getIndex(); 议员(m,i); editMemberFrame.setVisible(false); List data=mMapper.selectAllMembers(); MyTableModel MyTableModel=新的MyTableModel(数据); int row=gui.getTable().getSelectedRow(); myTableModel.tableUpdate(行,m); } });
看看这个片段

MyTableModel myTableModel = new MyTableModel(data);
int row = gui.getTable().getSelectedRow();
myTableModel.tableUpdate(row, m);
您正在创建一个新的表模型,但它与表没有任何关联


我也会使用
fireTableRowsUpdates
而不是
fireTableDateChanged
,因为这不是一个戏剧性的更新

我可能会使用fireTableCellUpdated或fireTableRowsUpdates而不是fireTableDataChanged,但这一切都假设myTableModel是表使用的同一个模型…尝试了这两种方法。没什么区别。但我正在制作另一个类的TableModel实例?或者这就是我正在尝试的。那么表是如何知道的呢?我是从另一个类中获取表的,正如您看到的“gui.getTable()”应该是“gui.getTable().setModel(myTableModel)”?但是在代码中,您创建的是一个全新的模型实例,它从未应用于表
MyTableModel myTableModel = new MyTableModel(data);
int row = gui.getTable().getSelectedRow();
myTableModel.tableUpdate(row, m);